Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:如何设计泛型类,使类型参数必须继承某个类?_C#_.net_Class_Generics - Fatal编程技术网

C#:如何设计泛型类,使类型参数必须继承某个类?

C#:如何设计泛型类,使类型参数必须继承某个类?,c#,.net,class,generics,C#,.net,Class,Generics,我写了一个类似这样的类: public class MyClass<T> { public void doSomething() { T.somethingSpecial; } } 公共类MyClass { 公共无效剂量测定法() { 一些特别的东西; } } 这段代码没有编译,因为编译器不知道t是什么。我想约束T,以便它必须继承某个类,该类定义了somethingSpecial。如果你能告诉我如何通过约束T来做同样的事情,这样它就必须实现一

我写了一个类似这样的类:

public class MyClass<T>
{
    public void doSomething()
    {
       T.somethingSpecial;
    }
}
公共类MyClass
{
公共无效剂量测定法()
{
一些特别的东西;
}
}
这段代码没有编译,因为编译器不知道t是什么。我想约束T,以便它必须继承某个类,该类定义了
somethingSpecial
。如果你能告诉我如何通过约束T来做同样的事情,这样它就必须实现一个特定的接口,那么你就可以获得额外的积分。

公共类MyClass其中T:IAmSomethingSpecial
public class MyClass<T> where T: IAmSomethingSpecial

它被称为。

在类声明中使用以下类型参数约束:

public class MyClass<T> where T : MyBaseClass
公共类MyClass,其中T:MyBaseClass
例如,您可以阅读有关类型参数约束的更多信息。

您需要:

公共类MyClass其中T:ISomeInterface
{
公共无效剂量测定法()
{
instanceOfT.somethingSpecial();
}
}
您需要的是:

公共类MyClass,其中T:SomeParentClass

阅读文档。通用约束

class MyClass<T> where T : someinterfaceorbaseclassthatTmustinherit
class MyClass其中T:someinterfaceorbaseclassthatTmustinherit
公共接口
{
无效剂量();
}
公共类MyClass,其中T:ISomeInterface
{
公共无效剂量测定法()
{
T.DoSomething();
}
}
where
关键字允许您指定给定泛型类型的约束。您可以将接口换成类。

C#使用泛型,而不是模板。
public class MyClass<T> where T : SomeParentClass
class MyClass<T> where T : someinterfaceorbaseclassthatTmustinherit
public interface ISomeInterface
{
    void DoSomething();
}

public class MyClass<T> where T : ISomeInterface
{
    public void doSomething()
    {
       T.DoSomething();
    }
}