你可以檢查的方法中的類型,然後將其轉換爲適當的類型,並做相應的「東西」:
public void method<T>(T myObject)
{
if (myObject is myTypeA)
{
myTypeA objA = myObject as myTypeA;
objA.DoA_Stuff();
}
else if (myObject is myTypeB)
{
myTypeB objB = myObject as myTypeB;
objB.DoB_Stuff();
}
else
{
return ;
}
}
但是,這將是仿製藥的浪費。如果他們共享一些方法,你也可以創建一個基類,並讓typeA和typeB繼承它。然後你的方法可能需要一個基類對象作爲參數:
public void method(BaseClass myObject)
而且將只有一個如果 - 情況下,一個鑄造。只有具有更多方法的那個纔是基類。
編輯:
想象一下,你就會有這樣的結構:
public class BaseType
{
public int SharedProp { get; set; } // shared property
public virtual int DoSharedStuff() // shared method
{
return SharedProp;
}
}
public class myTypeA : BaseType
{
public int A_Prop { get; set; }
// overwritten shared meth adjusted to the needs of type A
public override int DoSharedStuff()
{
return base.SharedProp + this.A_Prop;
}
}
public class myTypeB : BaseType
{
public int B_Prop { get; set; }
// overwritten shared meth adjusted to the needs of type B
public override int DoSharedStuff()
{
return base.SharedProp + this.B_Prop;
}
// individual method of Type B
public int DoB_Stuff()
{
return this.B_Prop;
}
}
然後你的方法將只需要基類的孩子之一,並執行根據需要:
public void method(BaseType myObject)
{
// shared case: here type A will perform type A action
// and type B will perform type B action
myObject.DoSharedStuff();
// case B where you need really the extra stuff!
if (myObject is myTypeB)
{
myTypeB objB = myObject as myTypeB;
objB.DoB_Stuff();
}
}
這種方法或現象被稱爲Polymorphism
爲什麼不只是有兩種不同參數類型的方法?泛型帶來了什麼? –
我想要做的是myTypeA和myTypeB共享一些我想調用的相同方法,但myTypeB有一些我想要處理
,並且有很多相同的東西,所以如果我使2個獨立的方法我有噸的冗餘,讓我做這篇文章,因爲這是舊的解決方案 – Gotti92
你是在尋找[''Type.GetGenericArguments()'](https://stackoverflow.com/q/557340/3744182)? – dbc