C# 在不了解实现的情况下,如何在抽象类中创建对象?
在我下面的库摘要中有没有实现“CreateNode”方法的方法?或者这只能在库之外的客户机代码中完成?我当前收到错误“无法创建抽象类或接口'ToplogyLibrary.AbstractNode'的实例”C# 在不了解实现的情况下,如何在抽象类中创建对象?,c#,.net,generics,abstract-class,C#,.net,Generics,Abstract Class,在我下面的库摘要中有没有实现“CreateNode”方法的方法?或者这只能在库之外的客户机代码中完成?我当前收到错误“无法创建抽象类或接口'ToplogyLibrary.AbstractNode'的实例” 公共抽象类抽象拓扑 { //性质 公共字典节点{get;private set;} 公共列表关系{get;private set;} //建设者 受保护的抽象拓扑() { 节点=新字典(); } //方法 公共抽象节点CreateNode() { var node=new AbstractNo
公共抽象类抽象拓扑
{
//性质
公共字典节点{get;private set;}
公共列表关系{get;private set;}
//建设者
受保护的抽象拓扑()
{
节点=新字典();
}
//方法
公共抽象节点CreateNode()
{
var node=new AbstractNode();//**不起作用**
Nodes.Add(node.Key,node);
}
}
}
公共抽象类抽象节点
{
公共T密钥{get;set;}
}
公共抽象类抽象关系
{
公共抽象节点父节点{get;set;}
公共抽象节点子{get;set;}
}
您无法创建抽象类的实例,这就是您收到错误的原因
相反,您可以将
CreateNode
声明为抽象方法,并在任何子类中实现它。您无法创建抽象类的实例,这就是您收到错误的原因
相反,您可以将
CreateNode
声明为抽象方法,并在任何子类中实现它。那么您希望创建什么具体的节点类呢?这是否应该留待具体的拓扑类处理?如果是这样,您可能希望将其抽象化:
public abstract AbstractNode<T> CreateNode();
公共抽象抽象节点CreateNode();
然后在具体的拓扑类中提供一个具体的实现
或者,也可以在节点类型中将类设置为泛型:
public abstract class AbstractTopology<TValue, TNode>
where TNode : AbstractNode<TValue>, new()
公共抽象类抽象拓扑
其中TNode:AbstractNode,new()
然后您可以像这样实现CreateNode:
public AbstractNode<T> CreateNode()
{
var node = new TNode();
Nodes.Add(node.Key, node);
return node;
}
public AbstractNode CreateNode()
{
var node=newtnode();
Nodes.Add(node.Key,node);
返回节点;
}
就我个人而言,我对涉及这么多抽象类的设计有点怀疑,但也许你有充分的理由。那么你想创建什么具体的节点类呢?这是否应该留待具体的拓扑类处理?如果是这样,您可能希望将其抽象化:
public abstract AbstractNode<T> CreateNode();
公共抽象抽象节点CreateNode();
然后在具体的拓扑类中提供一个具体的实现
或者,也可以在节点类型中将类设置为泛型:
public abstract class AbstractTopology<TValue, TNode>
where TNode : AbstractNode<TValue>, new()
公共抽象类抽象拓扑
其中TNode:AbstractNode,new()
然后您可以像这样实现CreateNode:
public AbstractNode<T> CreateNode()
{
var node = new TNode();
Nodes.Add(node.Key, node);
return node;
}
public AbstractNode CreateNode()
{
var node=newtnode();
Nodes.Add(node.Key,node);
返回节点;
}
就我个人而言,我对涉及这么多抽象类的设计有点怀疑,但也许你有充分的理由。定义一个受保护的纯抽象虚拟方法,CreateNode将调用该方法,子类返回一个新对象
CreateNodeImpl或其他。定义一个受保护的纯抽象虚拟方法,CreateNode将调用该方法,使子类返回一个新对象
CreateNodeImpl之类的。该死,你的手指快了。该死,你的手指快了。听起来不错。然而,使用该方法的调用方在使用mehod时是否必须传递类型?听起来不错。但是,使用方法的调用方在使用mehod时是否必须传递类型?