有没有一种方法可以根据传递给泛型类的类型来限制对某些方法的访问?

时间:2019-03-30 14:35:11

标签: c# generics

我目前正在研究通用类。在传递不同类型时,我想将某些方法的可访问性限制为。假设它看起来像这样:

public class MyGeneric<T>
{
public void Foo1(){}
public void Foo2(){}
}

我显然可以使用typeof运算符来实现不同的行为,但可以说Foo1计算了一些数字的平均值。如果我输入“学生”类型,则可以计算平均成绩。但是,假设我通过了“汽车”,但我不希望它做任何事情。只在那儿放而对这种类型什么也不做将是多余的。有没有办法完全限制对它的访问?谢谢!

1 个答案:

答案 0 :(得分:1)

您可以为此使用抽象/继承。 创建一个类

public class MyGeneric<T>
{
    public void Foo1(){}
}

处理所有“全局”函数,然后创建一个子类,如下所示:

public class MyGenericChild<T> : MyGeneric<T> where T : IMyInterface
{
    public void Foo2(){}
}

然后可以使用特定的子代来处理特定于类型的方法。 如果需要,可以使用工厂模式扩展它以检索正确的泛型类。

相关问题