0

ほとんどの場合、子クラスがオーバーライドするメソッドを持つ基本クラスがあります。ただし、基本クラスのメソッドを完全に置き換えるのではなく、子クラスで派生したものを基本クラスに既にあるものに追加したいと考えています。

例えば:

class BaseClass{

public string str()
 {
   return "Hello my name is" ;
 }
}

class ChildClass : BaseClass{

public override string str() 
 {
   return "Sam";
 }
}

要点は、ChildClass のインスタンスを作成して str() メソッドにアクセスしたい場合、文字列が「こんにちは、私の名前はサムです」と出力されることです。

私は周りを見回してきましたが、基本クラスは継承されていることさえ知らないはずなので、これは起こらないはずです。では、設計が間違っている場合、どうすればこれを行うことができるでしょうか? BaseClass から継承する複数の子クラスがあることに注意してください。

ありがとうございました

4

3 に答える 3

8

常にこれを行う必要があり、派生クラスの実装者にメソッドのオーバーライドと基本クラスへの呼び出しを忘れないように頼りたくない場合は、テンプレート パターンを使用できます。

public abstract class BaseClass
{
    public string str()
    {
        return "Hello my name is " + Name;
    }

    protected abstract string Name { get; }
}

これで、継承する非抽象クラスBaseClassはコンパイラによって をオーバーライドする必要がNameあり、その値は によって消費される可能性がありますBaseClass

public class ChildClass : BaseClass
{
    protected override string Name
    {
        get { return "Sam"; }
    }
}

明らかに、これは基本クラスが であることに依存しabstractます。

于 2012-09-30T13:30:12.533 に答える
2

基本クラスのメソッドを呼び出したい場合:

1.子クラスからvirtualできるように、基本クラスのメソッドを として宣言します。override

2.base基本クラスからメソッドを呼び出すために使用します。

internal class BaseClass
{
    public virtual string str()
    {
        return "Hello my name is" ;
    }
}

class ChildClass : BaseClass
{
    public override string str(){
        return base.str() + "Sam";
    }
}
于 2012-09-30T13:26:43.273 に答える
0

まず、メソッドを作成するvirual必要があります。そうしないと、オーバーライドできません。

public class BaseClass
{
  public virual string Str()
  {
    return "Hello my name is ";
  }
}

次に、子クラスbaseで、基本クラスのメソッドにアクセスするために使用できます。

public class ChildClass : BaseClass
{
  public override string Str()
  {
    return base.Str() + "Sam";
  }
}
于 2012-09-30T13:30:48.447 に答える