【问题标题】:Specify type *and* interface(s) of function parameter指定函数参数的类型*和*接口
【发布时间】:2014-08-22 14:27:53
【问题描述】:

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

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。 IE,我希望能够在不明确命名的情况下定位 ClassAClassBClassC 类(以便负责 TopClass 及其死者的开发人员可以轻松地重新定义这些组而不干扰其他组开发人员)。

【问题讨论】:

    标签: c# types interface polymorphism multiple-inheritance


    【解决方案1】:

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

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

    【讨论】:

    • 这非常有效。我在其他问题中看到过这种格式,但我想我把它误认为“T 可以是TopClass IGroupA”。谢谢!
    • @SandyGifford 如果您是第一次看到泛型和约束,我建议您阅读一些教程并查看 msdn 上的文档。而且,如果您有不同的问题,请不要编辑您当前的问题,而是 ask a new question
    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多