加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 02:03:20 所属栏目:百科 来源:网络整理
导读:我有一个类(基本上是链表,所以我们称之为List),它使用另一个类来存储数据(节点,所以让我们调用类Node). Node必须从List调用方法,但从其他地方调用它们可能会很混乱.我需要程序的其他部分来使用Node的引用,但只能通过List来更改它们. 在CI中会创建另一个类(让
我有一个类(基本上是链表,所以我们称之为List),它使用另一个类来存储数据(节点,所以让我们调用类Node). Node必须从List调用方法,但从其他地方调用它们可能会很混乱.我需要程序的其他部分来使用Node的引用,但只能通过List来更改它们.
在CI中会创建另一个类(让我们称之为Opaque),它有一个指向Node的私有指针并暴露Node的一些成员,如果这被传递给List,那么指向实际Node的指针将被“解压缩”并在内部使用,但是在C#中我没有想到一种方法来隐藏节点的其他部分对Node的引用,而不会让它无法访问List.
有没有办法做到这一点或某些具有相同功能的C#特定习语?

澄清:我想让它仅对List类可见.我已经知道了内部关键字.

解决方法

关于什么

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一起工作,那么最好将该类标记为@ eugene-podskal建议的内部,因为生活在同一个原始程序集中的许多“朋友”都可以访问Node类. (有关此辅助功能模型的更多详细说明,请参阅MSDN: internal (C# reference))

内部概念本身没有任何错误(如提议,然后由@dasblinkenlight提出异议).它也经常被.NET框架使用,请参阅http://referencesource.microsoft.com/#q=internal中的示例或各种.NET框架内部类.可以使用ILSpy看到整个内部.NET框架命名空间的示例,例如在命名空间Microsoft.Win32.SafeHandles中的system.dll

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读