C# 有没有办法根据传递给泛型类的类型限制对某些方法的访问?

C# 有没有办法根据传递给泛型类的类型限制对某些方法的访问?,c#,generics,C#,Generics,我目前正在研究一个通用类。我想在传递不同类型时限制对某些方法的可访问性。假设它看起来像这样: public class MyGeneric<T> { public void Foo1(){} public void Foo2(){} } 公共类MyGeneric { 公共void Foo1(){} public void Foo2(){} } 显然,我可以使用typeof操作符来实现不同的行为,但假设Foo1计算一些数字的平均值。如果我通过了“学生”类型,它可以计算平均成绩。但假

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

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

显然,我可以使用
typeof
操作符来实现不同的行为,但假设Foo1计算一些数字的平均值。如果我通过了“学生”类型,它可以计算平均成绩。但假设我在“车”里经过,我不想让它做任何事情。把它放在那里,什么也不做是多余的。有没有办法完全限制对它的访问?谢谢

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

public class MyGeneric<T>
{
    public void Foo1(){}
}
公共类MyGeneric
{
公共void Foo1(){}
}
它处理所有“全局”函数,然后创建如下子类:

public class MyGenericChild<T> : MyGeneric<T> where T : IMyInterface
{
    public void Foo2(){}
}
公共类MyGenericChild:MyGeneric其中T:IMyInterface
{
public void Foo2(){}
}
然后可以使用特定的子级来处理特定于类型的方法。
如果需要,您可以使用工厂模式对此进行扩展,以检索正确的泛型类。

在您共享的代码中,方法
Foo
不接受任何参数。那么您将在哪里通过
学生
汽车
?你能更清楚地解释一下这个问题,并编写一些更有意义的代码吗?是使用泛型时可以声明的所有限制。@ChetanRanpariya通过传递类型,我的意思是用传递的不同类型来声明MyGeneric的对象,而不是“T”。可以使用泛型的约束功能,它将限制您仅使用特定类型作为T。Read and