有没有一种方法告诉方法哪种类型的泛型?我想要做的是告诉方法它只能是A或B类型的对象,但没有别的,所以我可以像
一样工作 if (myObject.GetType() == typeof(myTypeA)){doAstuff();}
if (myObjectGetType() == typeof(myTypeB)) {doBstuff();}
method<T>(T myObject){ T = myTypeA, T = myTypeB, T = nothing else}
感谢您的帮助
答案 0 :(得分:1)
您可以使用where命令限制gernic的允许类型:
public void Test<T>(T param) where T : TypeA {
...
}
但这只是简单的约束,所以它不能解决两个类的问题,但是对于这种情况你可以使用方法重载:
public void Test(TypeA param) {
...
}
public void Test(TypeB param) {
...
}
如果你只有两个班级,我认为这是最好的解决方案,因为仿制药没有任何好处。
答案 1 :(得分:1)
您可以检查方法中的类型,然后将其转换为适当的类型并执行相应的“填充”:
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)
并且只有一个if-case和一个cast。只有具有更多方法的那个然后是基类。
修改强>
想象一下你会有这样的结构:
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