繁体   English   中英

C#:限制方法参数中的类型(不是泛型参数)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM