質問
みたいな機能があるのか気になります メソッドの継承 クラス全体の継承ではなく、私が説明しようとしている内容を詳しく説明します。
class a {
public void GetA(){
// some logic here
}
}
class b {
public void GetB() : new Class().GetA()
}
奇妙に見えるのはわかっていますが、オブジェクト構成パターンで委任を行う方法を読んでいて、何らかの理由でこのパターンを思いつきました。
解決
、あなたはデリゲートとしてで下駄を()に渡すことができます。
C#では、このような処置のような多くの事前定義された参加者が存在しますそして、のFunc に。それとも、あなたは常にメソッドのシグネチャに一致するように、独自のデリゲートをロールバックできます。
class a
{
public void GetA()
{
Console.WriteLine("Hello World!");
}
}
class b
{
// No explicit reference to class a of any kind.
public void GetB(Action action)
{
action();
}
}
class Program
{
static void Main(string[] args)
{
var a = new a();
var b = new b();
b.GetB(a.GetA);
}
}
他のヒント
組成を行うための一般的な方法は、型クラスAのクラスBにプライベートメンバ変数を作成し、GetB()呼び出しa.GetA()にすることです。たとえばます:
class a {
public void GetA(){
// some logic here
}
}
class b {
private a _a=new a();
public void GetB()
{
_a.GetA();
}
}
は別のオプションは、GetB()によって実行されるコードを供給するために呼び出すコードを簡単な方法の代わりにGetB呼ばデリゲートメンバー変数を定義できるようにするかもしれない。
私は考えることができる最も近いものは、どのようにC#であなたが「継承」その子クラス(または同じクラスのオーバーロードコンストラクタ)のことでクラスのコンストラクタができ、そうのようなものです。
class Animal {
public string Species { get; set; }
public Animal(string species) {
Species = species;
}
}
class Human : Animal {
public string Name { get; set; }
public Human(string name) : base("Homo sapien") {
Name = name;
}
}
上記のコードの動作は非常に簡単です:Human
クラスのコンストラクタは、基本的に何かを行う前にAnimal
クラスのコンストラクタを呼び出します。なぜ、これと同じ機能は、私はよく分からない、非コンストラクタメソッドには使用できません。
このことはできません。あなたはb.GetB
がa.GetA
の機能を再利用したいなら、あなたはa
と呼び出しa.GetA
をインスタンス化する必要があります。
わずかに異なるアプローチが、むしろそれを直接インスタンス化するよりも、ClassA
のコンストラクタでClassB
のインスタンスを受け入れるであろう。
public class ClassB
{
private readonly ClassA _a;
public b(ClassA a)
{
_a = a;
}
public void GetB()
{
_a.GetA();
// Other logic
}
}
public class Article
{
public object AddOrUpdate(params object[] paras){
return null;
}
}
public class Test:Article
{
public new object AddOrUpdate(params object[] paras){
//do your logic......
return base.AddOrUpdate(paras);
}
}
あなたはこのクラスinhretているのですか?この意味BASEオブジェクトのプロパティを取得または設定を行うことができます。
あなたがデリゲートを行う場合、あなたは同じロジックでより多くの仕事をする必要があります。
が、デリゲートはdiffenentドメインオブジェクトを取得し、より多くのオーバーアプリのことを行うことができます。
もし下駄()は静的メソッドに変更され、あなたは、単にGetB()関数内でそれを呼び出すことができます:
class a {
public static void GetA() {
// some logic here
}
}
class b {
public void GetB() {
a.GetA();
}
}
下駄の場合は、()下駄()はオブジェクトコンテキスト定義によって(例えば、目に見えない「この」ポインタを)必要があるので、それは意味がない、静的ではありません。クラスAがクラスBについては何も知らないとしてあなたは、クラスAにオブジェクトBのインスタンスを渡すことはできません。
あなたが本当にしようとしていますか?