C# 在不了解实现的情况下,如何在抽象类中创建对象?

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

在我下面的库摘要中有没有实现“CreateNode”方法的方法?或者这只能在库之外的客户机代码中完成?我当前收到错误“无法创建抽象类或接口'ToplogyLibrary.AbstractNode'的实例”

公共抽象类抽象拓扑
{
//性质
公共字典节点{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时是否必须传递类型?