でオブジェクトを作成することができます。
抽象親クラス:
:保護されたコンストラクタを持つ
public abstract class Animal
{
private string name;
public Animal(string name)
{
this.Name = name;
}
public Animal() { }
public string Name
{
get { return this.name; }
set { this.name = value; }
}
public virtual void talk()
{
Console.WriteLine("Hi,I am an animal");
}
}
クラス
public class Lion : Animal
{
private string yahoo;
protected Lion(string name) : base(name)
{
this.Yahoo = "Yahoo!!!";
}
public string Yahoo
{
get
{
return yahoo;
}
set
{
yahoo = value;
}
}
public Lion() { }
}
ライオンクラスから派生し
public class Kiara : Lion
{
public Kiara(string name) : base(name)
{
}
public override void talk()
{
Console.WriteLine("HRRRR I'm a Kiara");
}
public Kiara() { }
}
クラスシンバ:
ライオンクラスから派生したクラスキアラメイン機能で
public class Simba : Lion
{
public Simba(string name) : base(name)
{
}
public override void talk()
{
Console.WriteLine("HRRRR I'm a {0} and this is my daughter:{1} {2}",
new Simba("Simba").Name,
new Kiara("Kiara").Name,
new Simba("Simba").Yahoo);
}
public Simba() { }
}
実装:
public static void Main(string[] args)
{
Animal lion = new Simba();
lion.Name = "Simba";
lion.talk();
Animal lion1 = new Kiara();
lion1.Name = "Kiara";
lion1.talk();
}
「私はあなたをないよう強くお勧めしたいですそうするのはなぜですか?私はテストのためにそれが必要です。結局のところそれは意味をなさないでしょうか? –
@Arnis L .:その時点では、テストをパスするためのハックを行うよりも、テストを書くのと全く同じくらい有用です。これは、あなたが探している(そしてテストしている)動作が明示的にサポートされていない(したがって、テスト可能ではない)ことを意味するので、このコンストラクタが 'protected'であることを一度遡って見てみましょう。 – David
@Arnis:通常、リフレクションでアクセシビリティモデルをバイパスする必要がある場合は、問題のメンバーにアクセスしようとするべきではないことを示唆しています。 –