Reputation: 22994
Well, this is a convoluted/complicated question, and here it goes:
Derived
class inherits from the Base
class (class Derived: Base{}
)Class2
inherits from Class1
(class Class2: Class1 {}
)My current Class1
constructor has:
Derived d = new Derived();
What I want is that the type Derived
is passed from the Class2
constructor into its base (Class1
) constructor. 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");
}
}
I.e., by base(a, b, Derived1)
I want to pass from Class2
constructor/definition, what type Class1
will new, whether it is Derived1
or Derived2
.
Hope that I've made this convoluted/complicated question clear.
Upvotes: 1
Views: 463
Reputation: 1808
You can also use the typeof
keyword used below:
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:
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.
Upvotes: 2