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

在C#中创建不透明指针(引用),第1张

概述我有一个类(基本上是链表,所以我们称之为List),它使用另一个类来存储数据(节点,所以让我们调用类Node). Node必须从List调用方法,但从其他地方调用它们可能会很混乱.我需要程序的其他部分来使用Node的引用,但只能通过List来更改它们. 在CI中会创建另一个类(让我们称之为Opaque),它有一个指向Node的私有指针并暴露Node的一些成员,如果这被传递给List,那么指向实际N 我有一个类(基本上是链表,所以我们称之为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

总结

以上是内存溢出为你收集整理的在C#中创建不透明指针(引用)全部内容,希望文章能够帮你解决在C#中创建不透明指针(引用)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1219255.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存