我有一个基类(也可以是一个接口)和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");
}
}