簡體   English   中英

C#將類類型傳遞給基本構造函數

[英]C# to pass class type to base constructor

好吧,這是一個 盤繞 /復雜的問題,在這里:

  • 我有兩節課
    • Derived類繼承自Base類( class Derived: Base{}
    • Class2Class1繼承( 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 ,無論Class1Derived1還是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM