如何使用继承类的Type作为参数



我有一个基类(也可以是一个接口)和n个扩展基类的类。我想要有一个只例外基类类型的类的函数。

当前我正在做这样的事情

abstract class BaseClass{
public abstract void Execute();
}
class MyClass : BaseClass {
public void Execute(){
//my code
}
}
[...]
MyFunction(Type param)
{
//check if param is type of BaseClass. If not, throw exception 
}
这个实现的问题是,我可以传递任何类型的类。我的目标是防止这种情况发生。

和TypeScript一样,你可以这样做

myFunction(param: {new (): BaseClass}){
//my code
}

我可以在c#中使用类似的方法吗?

你可以做几件事,这取决于你实际上想要做的函数。说明您的实际用例可以更容易地提出解决方案。

查看typescript代码,看起来您希望能够调用函数内部的构造函数来生成从BaseClass派生的给定类型的实例。

在这种情况下,我会尝试使用泛型:

public void MyFunction<T>() where T: BaseClass, new()
{
T myClass = new T();
//Do stuff...
}

这适用于接口/类。它只接受来自BaseClass的类型。

编辑:在收到通知后更新了我的答案,我以前的答案不知道它是否是基类的孙子

public abstract class BaseClass
{
public abstract void Test();
}
public class DerivedFromBase : BaseClass
{
public override void Test(){}
}
public class Grandchild : DerivedFromBase 
{
}
public class Main
{
Grandchild aClass= new Grandchild(); // Instantiate Normally
UseIfOnlyTypeOfBaseClass(aClass);// Use Method with check like this
}
private void UseIfOnlyTypeOfBaseClass<T>(T param)
{
if (typeof(T).IsSubclassOf(typeof(BaseClass)))
{
Console.WriteLine("Match");
}
}

相关内容

  • 没有找到相关文章

最新更新