接口和基类的类成员

时间:2012-09-04 12:57:46

标签: c# .net

我有一个名为Graph的基类和一个名为IDataTip的接口。

我有很多实现这两者的课程,例如:

class TreeGraph : Graph, IDataTip
{
  //interface implementation
}

我想知道是否有办法声明另一个类的成员,使得成员的类型需要与 抽象类和接口匹配的类?

例如,在以下类中:

class GraphExporter
{
    public Object GraphWithDataTip {set; get;}
}

我希望能够将Object类型替换为表示GraphWithDataTip应该从Graph继承并实现IDataTip的内容。有没有办法做到这一点?或者如果没有,有人可以推荐更合理的设计吗?

提前致谢!

4 个答案:

答案 0 :(得分:6)

您可以使用通用约束

public class FooClass<T> where T: Graph, IDataTip
{
    public T Foo { get; set; }
}

答案 1 :(得分:4)

听起来好像你想要:

  • 要用于参数的新基本类型(abstract class thing : Graph, IDataTip
  • void MyMethod<T>(T thing) where T : Graph, IDataTip
  • 形式的通用方法

或者,您可以在方法中强制转换参数,如果不合适则抛出异常,但这只是运行时检查。

答案 2 :(得分:0)

您可以定义Graph和IDataTip实现的接口,然后让另一个类的成员成为该新接口的实例。

//new interface
interface IGraphAndDataTip
{
}

class Graph : IGraphAndDataTip
{
}

interface IDataTip : IGraphAndDataTip
{
}

class AnotherClass
{
    //implements both graph and IDataTip
    IGraphAndDataTip MyMember;
}

答案 3 :(得分:0)

我假设你的意思是基类的派生类?这是你的意思吗?

public abstract class Graph {
    public abstract void SomeMethod();
}

public interface IDataTip {
    void SomeMethod();
}

public class MyClassDerivedFromGraph: Graph, IDataTip {
    void SomeMethod() {
       // This method matches both the interface method and the base class method.
    }
}