0
我遇到类和接口问题。 我想实现一个接口声明一个方法,它采用实现的类的类型。 当我从这个类继承时,该方法应该只采用继承类的类型。确保实现接口和继承时的参数类型
这可能吗?
短代码剪断:
class Program
{
static void Main(string[] args)
{
Node node1 = new Node();
Node node2 = new Node();
Node node3 = new Node();
// Connect node2 to node1 and node3 to node1.
node1.connect(node2)
.connect(node3);
SomeNode node4 = new SomeNode();
SomeNode node5 = new SomeNode();
node4.connect(node5);
// node1.connect(node4); // This should not be possible because node1.connect() should only accept Node and not SomeNode.
}
}
interface INode
{
int Id { get; set; }
// Instead of INode, here should be the type of the implementing class or the type of the subclass (or the sub-subclass ...).
INode connect(INode node);
}
class Node : INode
{
public int Id { get; set; }
// This list MUST be protected and MUST be able to contain only objects of the current class type.
protected List<Node> connectedNodes;
// This should implement the interface mehtod but in subclasses, the type should not be Node but the type of the subclass.
// Of cause, this method should not be reimplemented in subclasses.
public Node connect(Node node)
{
this.connectedNodes.Add(node);
return this; // Enable chaining.
}
}
class SomeNode : Node
{
// Here should be some additional functionality but NOT the connect() method!
}
如果可能,它可能很丑。例如,如果节点不是节点,则可以引发异常。但是,这给运行时和不编译时间检查。 –