簡體   English   中英

有條件地在 C# 中實例化一個 class

[英]Conditionally instantiate a class in C#

我一直在努力讓新代碼正常工作。 通過 if 語句,我能夠以更簡單但更廣泛的方式做到這一點。 但是,由於這將是應用程序的第 2 版,我想讓代碼更簡潔、更高效。

我要做的是有條件地實例化一個 class。 它會像這樣 go :

int Airplane = 195;

if (Airplane == 190)
    _E190 Aircraft = new _E190();

else if (Airplane == 195)
    _E195 Aircraft = new _E195();

我有兩個類,但我想使用關鍵字“飛機”,所以我不必為每個 class 創建多個代碼部分。 我還發現 C# 中沒有多個 inheritance(在我看來可以解決問題),而且我對這種語言比較陌生。

到目前為止,我已經按照我想要的方式實例化了 class,但我似乎無法使用每個 class 中聲明的變量。 我已經這樣做了:

    int Airplane = 195;

    var Aircraft = Activator.CreateInstance( (Airplane == 195) ? typeof(_E195) : typeof(_E190));
    MessageBox.Show(Aircraft.GetType().ToString());

MessageBox 正確顯示了類型,但同樣,我無法使用“飛機”object 訪問 class 本身。 我確信有更多方法可以做到這一點,但其中任何一種對我來說都很好。

謝謝!

我認為它們都是從其他東西繼承而來的,這就是為什么你需要多個 inheritance?

制作一個接口(IAircraft)並讓他們都實現它。

interface IAircraft {
    /* Common methods here */
}

class _E190 : TheParentClass, IAircraft {
    /* Your code */
}

class _E195 : TheOtherParentClass, IAircraft {
    /* Your code */
}

/* ... */

int Airplane = 195;
IAircraft Aircraft;

if (Airplane == 190)
    Aircraft = new _E190();
else if (Airplane == 195)
    Aircraft = new _E195();

您無法使用以前的方法訪問 class 的原因是,編譯器需要知道它是什么類型的 class。 為此,您需要將其轉換為適當的類型......但這會讓您回到同樣的問題。 您可以使用反射方法繼續此操作,但使用 inheritance 或實現會更加高效和簡潔。

你為什么不定義類似的東西

public abstract class Aircraft
{
}

public class _E190 : Aircraft
{
}


public class _E195 : Aircraft
{
}

然后執行以下操作:

Aircraft Aircraft;
int Airplane = 195;

if (Airplane == 190)
    Aircraft = new _E190();

else if (Airplane == 195)
    Aircraft = new _E195();

編輯:此外,正如其他人建議的那樣,您可以使用接口而不是抽象 class。 請注意,在這種情況下,您必須雙重定義所有常見的屬性和方法(如果有的話)。

閱讀 Object 工廠模式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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