你好,我有以下问题:
我有一个结构
public struct Cell
{
public Node Value;
public static implicit Cell(Node value)=>new Cell(value); //can't since node less accesible then cell
}
此结构Cell
包含类型为Node
的属性,该属性为抽象基类,当前为internal
及其所有派生类。我需要以某种方式使{{ 1}}结构可用于其他开发人员,以便他们可以提取Cell
的值而无需了解Node
派生的类。
Node
我该如何实现? internal abstract class Node{
internal class ANode:Node{
public byte[] internalValue;
}
internal class BNode:Node{
public int internalValue;
}
}
暴露在外面,抽象基类cell
也应该暴露在外面。用户应该能够从Node
隐式转换为Node
。
当前方法
到目前为止,我已经尝试为Cell
定义一个接口IRaw
,该接口从Node
派生类中提取内容。显式实现是一个虚拟方法,在派生类中重载了。 / p>
Node
上述方法的问题在于,我无法将 interface IRaw{
byte[] GetRaw();
}
internal abstract class Node:IRaw
{
byte[] IRaw.GetRaw()=>this.GetRaw();
protected virtual byte[] GetRaw(){ ....}
}
internal class ANode:Node
{
protected override byte[] GetRaw()
{
.....
}
}
作为参数传递给IRaw
构造函数中的错误代码:
Cell
。
user defined conversions to or from an interface are not allowed
有什么建议吗?我实际上需要在公开的 public struct Cell
{
public IRaw Value;
public static implicit Cell(IRaw value)=>new Cell(value);
}
与内部的Cell
内容之间建立一个“桥梁”。
答案 0 :(得分:3)
您只需公开Node
并将其派生类保留在内部即可。与此无关,您应该考虑不要在嵌套类中派生Node
以获得更好的可维护性:
public abstract class Node {
}
internal class ANode : Node {
public byte[] internalValue;
}
internal class BNode : Node {
public int internalValue;
}
如果您希望能够从外部程序集中创建ANode
和BNode
的实例,则可以使用抽象工厂:
public static class NodeFactory {
public Node CreateNode(byte[] value) {
return new ANode { internalValue = value };
}
public Node CreateNode(int value) {
return new BNode { internalValue = value };
}
}