如何公开基数 class,同时将派生的基数保留在内部
How to expose base class while keeping derived ones internal
您好,我遇到了以下问题:
我有一个结构
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
的 属性,它是一个抽象基础 class,目前是 internal
及其所有派生 classes.What 我需要的是以某种方式让其他开发人员可以访问 Cell
结构,以便他们可以在不知道 Node
派生的 class 的情况下提取 Node
的值。
internal abstract class Node{
internal class ANode:Node{
public byte[] internalValue;
}
internal class BNode:Node{
public int internalValue;
}
}
我怎样才能做到这一点? cell
暴露给外部,抽象基础 class Node
也应该如此。用户应该能够从 Node
隐式转换为 Cell
。
当前方法
到目前为止,我尝试的是为 Node
定义一个接口 IRaw
,它从 Node
派生 classes.The 中提取内容,显式实现是一个虚拟方法,在派生 classes.
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
之间的 "Bridge",即 public 和 Node
的内部内容。
您可以简单地制作 Node
public 并将其派生的 类 保留在内部。与此无关,您应该考虑不在嵌套 类 中派生 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 };
}
}
您好,我遇到了以下问题:
我有一个结构
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
的 属性,它是一个抽象基础 class,目前是 internal
及其所有派生 classes.What 我需要的是以某种方式让其他开发人员可以访问 Cell
结构,以便他们可以在不知道 Node
派生的 class 的情况下提取 Node
的值。
internal abstract class Node{
internal class ANode:Node{
public byte[] internalValue;
}
internal class BNode:Node{
public int internalValue;
}
}
我怎样才能做到这一点? cell
暴露给外部,抽象基础 class Node
也应该如此。用户应该能够从 Node
隐式转换为 Cell
。
当前方法
到目前为止,我尝试的是为 Node
定义一个接口 IRaw
,它从 Node
派生 classes.The 中提取内容,显式实现是一个虚拟方法,在派生 classes.
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
之间的 "Bridge",即 public 和 Node
的内部内容。
您可以简单地制作 Node
public 并将其派生的 类 保留在内部。与此无关,您应该考虑不在嵌套 类 中派生 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 };
}
}