c# - 在 C# 中创建不透明指针(引用)

标签 c# opaque-pointers

我有一个类(基本上是一个链表,所以我们称它为 List),它使用另一个类来存储数据(节点,所以我们称该类为 Node ). Node 具有必须从 List 调用的方法,但从其他地方调用它们可能会很麻烦。我需要程序的其他部分使用 Node 的引用,但只能通过 List 更改它们。
在 C++ 中,我会创建另一个类(我们称它为 Opaque),它有一个指向 Node 的私有(private)指针并公开 Node 的一些成员,如果这被传递给 List,指向实际 Node 的指针将被“解包”并在内部使用,但在 C# 中我还没有想到隐藏对的引用的方法Node 来自程序的其余部分,而不会使 List 无法访问它。
有什么方法可以做到这一点,或者有一些具有相同功能的特定于 C# 的习惯用法吗?

澄清:我想让它只对 List 类可见。我已经知道 internal 关键字。

最佳答案

怎么样

public interface INode
{
    string Name { get; }
}

public class List
{
    private class Node : INode
    {
        public string Name { get; set; }
        public Node Next { get; set; }
    }

    private List<Node> _items = new List<Node>();

    public INode GetItemAt(int index)
    {
        return _items[index];
    }

    public INode GetNextItem(INode item)
    {
        return (item is Node) ? ((Node)item).Next : null;
    }
}

只有 INode 公开可见,实现细节隐藏。

如果有很多内部代码与 Node 一起工作,那么最好将类标记为 internal,正如 @eugene-podskal 所建议的那样Node 类将可供生活在同一个原始程序集中的许多“ friend ”访问(有关此可访问性模型的更详细描述,请参阅 MSDN: internal (C# reference))

internal 概念本身并没有错(由@dasblinkenlight 提出并提出异议)。它也经常被 .NET 框架使用,参见 http://referencesource.microsoft.com/#q=internal示例或各种 .NET 框架内部类。可以使用 ILSpy 查看整个内部 .NET 框架 namespace 的示例。例如在命名空间 Microsoft.Win32.SafeHandles

中的 system.dll

关于c# - 在 C# 中创建不透明指针(引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25950670/

相关文章:

c# - 异常 System.Reflection.TargetInvocationException - Backgroundworker

c# - 在异步函数中使用异步?

c# - Entity Framework 5.0b2 代码优先 : One-To-Many and One-To-One for the same table, 带级联删除

c - 使用指向非结构类型的不透明指针

c++ - 向上转换不透明指针

c - 向不透明句柄添加 const-ness

c# - Monogame - 改变 Sprite 的大小

c typedef(ed) 不透明指针

C 结构信息隐藏(不透明指针)

c# - 与 ContentTemplate 中的 Bindings 和 DataContext 混淆