C#:限制方法参数中的类型(不是通用参数)
我想编写如下函数
public void Foo(System.Type t where t : MyClass) { ... }
换句话说,参数类型是System.Type
,我想将允许的Type
限制为从MyClass
派生的Type
。
有没有办法在语法上指定这个,或者必须在运行时检查?
如果你的方法必须采用Type类型作为它的参数,我认为没有办法做到这一点。 如果你有方法调用的灵活性,你可以这样做:public void Foo(MyClass myClass)和通过调用.GetType()来获取Type。
扩大一点。 System.Type是参数的类型,因此无法进一步指定应传递的内容。 就像采用1到10之间的整数的方法一样,必须采用int然后执行运行时检查是否正确遵守了限制。
将类型指定为MyClass或从中派生, 是对参数本身的值检查 。 这就像说hello参数
void Foo(int hello) {...}
必须在10到100之间。在编译时无法检查。
您必须使用generics或在运行时检查类型,就像任何其他参数值检查一样。
您可以使用以下内容:
public void Foo(T variable) where T : MyClass { ... }
电话会议如下:
{ ... Foo(someInstanceOfMyClass); ... }
理论上你可以用属性来完成你想要的东西。 但这更清楚(imo)并完全相同:
public void Foo(MyClass m) { Type t = m.GetType(); // ... }
你为什么不用
public void foo();
代替?
您还可以使用扩展方法,该方法可用于所有可转换为MyClass的对象:
public static class MyClassExtensions { public static void Foo(this MyClass obj) { // ... } }
你可以使用它,就好像它是一个普通的对象方法:
var x = new MyClass(); x.Foo();