Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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#_Types_Interface_Polymorphism_Multiple Inheritance - Fatal编程技术网

C# 指定函数参数的类型*和*接口

C# 指定函数参数的类型*和*接口,c#,types,interface,polymorphism,multiple-inheritance,C#,Types,Interface,Polymorphism,Multiple Inheritance,我有一个类结构,我想对其应用一些奇怪的约束: public abstract class TopClass {} public class ClassA : Topclass {} public class ClassB : Topclass {} public class ClassC : Topclass {} public class ClassD : Topclass {} public class ClassE : Topclass {} 我想将它们分为几个类别,其中一些类别重叠,

我有一个类结构,我想对其应用一些奇怪的约束:

public abstract class TopClass {}

public class ClassA : Topclass {}
public class ClassB : Topclass {}
public class ClassC : Topclass {}
public class ClassD : Topclass {}
public class ClassE : Topclass {}
我想将它们分为几个类别,其中一些类别重叠,因此在使用
TopClass
时,我可以要求这种组合或那种组合。由于C#不支持多继承,我一直在尝试使用接口:

public abstract class TopClass {}

public interface IGroupA {}
public interface IGroupB {}

public class ClassA : Topclass, IGroupA          {}
public class ClassB : Topclass, IGroupA          {}
public class ClassC : Topclass, IGroupA, IGroupB {}
public class ClassD : Topclass, IGroupB          {}
public class ClassE : Topclass, IGroupB          {}
这一切都很好,但实际上使用这种疯狂是我遇到麻烦的地方我不知道如何指定函数的参数类型应为
TopClass
并实现接口
IGroupA
。也就是说,我希望能够以类
ClassA
ClassB
ClassC
为目标,而无需明确命名它们(这样负责
TopClass
及其已故者的开发人员可以轻松地重新定义组,而不会干扰其他开发人员).

您可以使用,并且可以指定类型应派生自的类和该类型应实现的接口:

void MyFunction<T>(T argument) where T : TopClass, IGroupA
{

}
void MyFunction(T参数),其中T:TopClass,IGroupA
{
}
您可以使用并且可以指定类型应派生自的类以及该类型应实现的接口:

void MyFunction<T>(T argument) where T : TopClass, IGroupA
{

}
void MyFunction(T参数),其中T:TopClass,IGroupA
{
}

这项工作非常有效。我在其他问题中看到过这种格式,但我想我把它错认为“
T
可以是
TopClass
IGroupA
”。谢谢@SandyGifford如果您第一次看到泛型和约束,我建议您阅读一些教程并查看msdn上的文档。而且,如果你有不同的问题,不要编辑你当前的问题,这非常有效。我在其他问题中看到过这种格式,但我想我把它错认为“
T
可以是
TopClass
IGroupA
”。谢谢@SandyGifford如果您第一次看到泛型和约束,我建议您阅读一些教程并查看msdn上的文档。如果您有不同的问题,请不要编辑当前问题。