[英]C#: Restricting Types in method parameters (not generic parameters)
我想编写一个如下所示的函数
public void Foo(System.Type t where t : MyClass)
{ ... }
换句话说,参数类型是System.Type
,我想将允许的Type
限制为从MyClass
派生的Type
。
有没有什么办法语法中指明,或不t
都在运行时进行检查?
如果您的方法必须采用Type
类型作为参数,则无法执行此操作。 如果您对方法调用具有灵活性,则可以执行以下操作:
public void Foo(MyClass myClass)
并通过调用.GetType()
获取Type
。
稍微扩展一下。 System.Type
是参数的类型,因此无法进一步指定应传递的内容。 就像采用 1 到 10 之间的整数的方法一样,必须采用 int,然后进行运行时检查是否正确遵守了限制。
将类型指定为 MyClass 或从它派生,是对参数本身的值检查。 这就像在说 hello 参数
void Foo(int hello) {...}
必须在 10 到 100 之间。无法在编译时进行检查。
您必须在运行时使用泛型或检查类型,就像任何其他参数值检查一样。
您可以使用以下内容:
public void Foo<T>(T variable) where T : MyClass
{ ... }
调用如下所示:
{
...
Foo(someInstanceOfMyClass);
...
}
你想要的理论上可以用属性来完成。 但这更清晰(imo)并且做完全相同的事情:
public void Foo(MyClass m) {
Type t = m.GetType();
// ...
}
你为什么不使用
public void foo<t>();
反而?
您还可以使用扩展方法,该方法可用于所有可转换为 MyClass 的对象:
public static class MyClassExtensions
{
public static void Foo(this MyClass obj)
{
// ...
}
}
您可以像使用对象的普通方法一样使用它:
var x = new MyClass();
x.Foo();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.