我有一个名为Graph
的基类和一个名为IDataTip
的接口。
我有很多实现这两者的课程,例如:
class TreeGraph : Graph, IDataTip
{
//interface implementation
}
我想知道是否有办法声明另一个类的成员,使得成员的类型需要与 抽象类和接口匹配的类?
例如,在以下类中:
class GraphExporter
{
public Object GraphWithDataTip {set; get;}
}
我希望能够将Object
类型替换为表示GraphWithDataTip
应该从Graph
继承并实现IDataTip
的内容。有没有办法做到这一点?或者如果没有,有人可以推荐更合理的设计吗?
提前致谢!
答案 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.
}
}