[英]C# to pass class type to base constructor
好吧,這是一個 盤繞 /復雜的問題,在這里:
Derived
類繼承自Base
類( class Derived: Base{}
) Class2
從Class1
繼承( class Class2: Class1 {}
) 我當前的Class1
構造函數具有:
Derived d = new Derived();
我想要的是將Derived
類型從Class2
構造函數傳遞到其基本( Class1
)構造函數中。 那可能嗎?
更完整的代碼:
class Base
{
public Base() {
Console.WriteLine("Inside Base Constructor");
}
~Base() {
Console.WriteLine("Inside Base Destructor");
}
}
class Derived1: Base {
public Derived1() {
Console.WriteLine("Inside The Derived1 Constructor");
}
~Derived1() {
Console.WriteLine("Inside The Derived1 Destructor");
}
}
class Derived2: Base {
public Derived2() {
Console.WriteLine("Inside The Derived2 Constructor");
}
~Derived2() {
Console.WriteLine("Inside The Derived2 Destructor");
}
}
class Class1
{
protected int a, b;
public Class1() {
a = 0;
b = 0;
Derived1 obj=new Derived1();
Console.WriteLine("Inside base class default constructor");
}
public Class1(int a, int b, Derived1) {
this.a = a;
this.b = b;
Derived1 obj=new Derived1();
Console.WriteLine("Inside base class parameterized constructor");
}
}
class Class2: Class1 {
int c;
public Class2(int a, int b, int c): base(a, b, Derived1) {
this.c = c;
Console.WriteLine("Inside derived class parametrized constructor");
}
}
即,通過base(a, b, Derived1)
我想從Class2
構造函數/定義傳遞Derived1
,無論Class1
是Derived1
還是Derived2
,它將是哪種類型的新類型。
希望我做了這個 盤繞 /復雜的問題明確。
您還可以使用下面使用的typeof
關鍵字:
class Class2 : Class1
{
int c;
public Class2(int a, int b, int c) : base(a, b, typeof(Derived1))
{
this.c = c;
Console.WriteLine("Inside derived class parametrized constructor");
}
}
void Main()
{
Class2 c2 = new Class2(1,2, 3);
}
或者使用如下C#泛型編寫更通用的形式:
class Class1<T> where T: new()
{
protected int a, b;
public Class1()
{
a = 0;
b = 0;
T obj = new T();
Console.WriteLine("Inside base class parameterized constructor, with {0}", typeof (T));
}
public Class1(int a, int b)
{
this.a = a;
this.b = b;
T obj = new T();
Console.WriteLine("Inside base class parameterized constructor");
}
}
class Class2<T> : Class1<T> where T: new()
{
int c;
public Class2(int a, int b, int c) : base(a, b)
{
this.c = c;
Console.WriteLine("Inside derived class parametrized constructor");
}
}
void Main()
{
var c2 = new Class2<Derived1>(1, 2, 3);
Console.WriteLine("-----");
var c2_2 = new Class2<Derived2>(1, 2, 3);
}
輸出將是:
Inside Base Constructor
Inside The Derived1 Constructor
Inside base class parameterized constructor, with Derived1
Inside derived class parametrized constructor
-----
Inside Base Constructor
Inside The Derived2 Constructor
Inside base class parameterized constructor, with Derived2
Inside derived class parametrized constructor
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.