在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |