public class BaseClass
{
public virtual void Display()
{
Console.WriteLine("I am Base Class");
}
public void BaseClassMethod()
{
Console.WriteLine("I am Base Class Method");
}
}
public class DerivedClass : BaseClass
{
public override void Display()
{
Console.WriteLine("I am Derived Class");
}
public void DerivedClassMethod()
{
Console.WriteLine("I am Derived Class Method");
}
}
class Program
{
static void Main(string[] args)
{
BaseClass bc = new BaseClass();
bc.Display();
bc.BaseClassMethod();
Console.WriteLine("--------------");
DerivedClass dc = new DerivedClass();
dc.Display();
dc.BaseClassMethod();
dc.DerivedClassMethod();
Console.WriteLine("--------------");
BaseClass bc2 = new DerivedClass();
bc2.Display();
bc2.BaseClassMethod();
//bc2.DerivedClass(); --> I can't reach b2.DerivedClass() method
Console.ReadLine();
}
}
皆さん。なぜ、どこで、ベースクラス参照から派生したクラスオブジェクトを作成して使用したいのかについて、私は心を澄まそうとしています。私は仮想がどのように動作するか知っている私は派生クラスが基本クラスであり、私は仮想メソッドをオーバーライドすることができます知っている。私は基本クラスの非仮想メソッドに到達することができます。しかし、私はどこで、なぜこのスタイルのオブジェクト作成を使いたいのかを知りたい。サンプルコードの最後の部分のように。ベースクラス参照でオブジェクトを作成する必要があるのはなぜですか?
BaseClass bc2 = new DerivedClass();
派生クラスのメソッドに到達できないため、派生クラスのメソッドを使用できません。しかし、それは新しいDerivedClassのためにまだクラスに派生しています。私が通常のDerivedClassを使用する場合、d = new DerivedClass();スタイル、私は両方のクラスのメソッドを使用することができます。私はちょうど私がこのスタイルを使いたい理由と状況を見つけることができません。誰かが私にどのような状況で私を見せてくれるのがうれしいです。基本クラス参照から派生クラスオブジェクトを使用しなければならないので、このスタイルが言語に存在することを理解できます。私はなぜそれがうまくいかないのか、それともどういうことを求めているのか分かりません。状況を知りたいありがとうございました。
あなたは 'クラス継承 'の読書/研究を行っていますか?おそらく、あなたは 'OOP'で' C#MSDN Google Search'を見て、どこでどのように、なぜ、どのように、そしてなぜそれが良いのかを理解することができます。 – MethodMan
あなたは1つの基本クラスと1つの派生クラスしか持っていないとき、多くの価値を見つける。共通の機能を持つ複数のクラスがありますが、継承の恩恵を受ける展開のパスも異なります。 – Jonesopolis
概要:基本クラスのフィーチャセットが提供するものよりも魅力的なものは、オブジェクトが使用されないことを、読者に伝えます。派生型の宣言は「論理的なノイズ」になります。必要以上に複雑にならないようにすることです。ジョブに合ったツールを使用してください。 –