[英]C# to pass class type to base constructor
Well, this is a 好吧,这是一个
convoluted /complicated question, and here it goes: 盘绕
/复杂的问题,在这里:
Derived
class inherits from the Base
class ( class Derived: Base{}
) Derived
类继承自Base
类( class Derived: Base{}
) Class2
inherits from Class1
( class Class2: Class1 {}
) Class2
从Class1
继承( class Class2: Class1 {}
) My current Class1
constructor has: 我当前的
Class1
构造函数具有:
Derived d = new Derived();
What I want is that the type Derived
is passed from the Class2
constructor into its base ( Class1
) constructor. 我想要的是将
Derived
类型从Class2
构造函数传递到其基本( Class1
)构造函数中。 Is that possible? 那可能吗?
More complete code: 更完整的代码:
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");
}
}
Ie, by base(a, b, Derived1)
I want to pass from Class2
constructor/definition, what type Class1
will new, whether it is Derived1
or Derived2
. 即,通过
base(a, b, Derived1)
我想从Class2
构造函数/定义传递Derived1
,无论Class1
是Derived1
还是Derived2
,它将是哪种类型的新类型。
Hope that I've made this 希望我做了这个
convoluted /complicated question clear. 盘绕
/复杂的问题明确。
You can also use the typeof
keyword used below: 您还可以使用下面使用的
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);
}
Or write more generic form using C# generics like this: 或者使用如下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);
}
And the output will be: 输出将是:
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
I hope this help. 希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.