これは初心者の質問になる可能性があるので簡単ではありませんが、とにかくそれを行います。私はJavaScriptのバックグラウンドから来ているので、C#(および他のOOP言語)にこの問題を解決するための何かが組み込まれているかどうかは分かりません。C#クラスに補助機能を追加する/委任する方法
&具体的なクラスを分割して再利用できるように委任された実装を使用して、私のクラスに補助機能を追加したいと思います。
以下の実装では、私が変更できない外部APIから "LibraryClass"を使用しています。私はそれを拡張することによってそれを使用する "MyClass"を書いています。
public class LibraryClass {...}
public class MyClass : LibraryClass {...}
ここでは、ページングなどの機能性を追加したいと考えています。そこで、私は "LibraryClass"を拡張する新しいクラス "Paging"を&拡張 "MyClass"から作成しました。
現在の実装
public class LibraryClass {...}
public class Paging : LibraryClass {
protected int pageNumber = 1;
public void setPaging(TRequest request) {
var httpReq = this.RequestContext.Get<IHttpRequest>();
pageNumber = httpReq.QueryString["page"]; // parsing syntax skipped
}
}
public class MyClass : Paging {
public override object OnGet(Products request) {
setPaging(request);
return new ProductsResponse { Products = GetAll() };
}
private List<Product> GetAll() {
// Use base.pageNumber to pull appropriate data
}
}
が、これはインタフェースを備えた、よりきれいな方法または任意の他のC#のメカニズムであることはできますか?
案実装
public class LibraryClass {...}
public interface IPaging : LibraryClass {
void setPaging(TRequest request)
}
public interface Paging : IPaging {
public void setPaging(TRequest request) {
var httpReq = this.RequestContext.Get<IHttpRequest>();
pageNumber = httpReq.QueryString["page"]; // parsing syntax skipped
}
}
public class MyClass : IPaging {...}
私はまた別のクラスへのアクセス&デリゲートの実装のようなMyClassのに多くの「具体的な」機能を追加したいです。
public interface IAuth {...}
public class Auth : IAuth {...}
public class MyClass : IPaging, IAuth {...}
ここでのキーはコードの区切りです。
私は学校でいくつかの基本的なOOPクラスを見逃していたかもしれませんが、遅くとも私が推測するツールはありません。
委任パターン:http://en.wikipedia.org/wiki/Delegation_pattern ...わからない、ただ思い。 – IAbstract
LibraryClassはフレームワークの一部です&私はそれを推測するので、私はそれの選択された機能を凌駕していますか? – SamJackSon