繁体   English   中英

.Net-LinkedListNode如何 <T> 的属性分配给?

[英].Net - How are LinkedListNode<T>'s Properties assigned to?

根据.Net的LinkedListNode<T>类的文档和元数据,其ListNextPrevious属性是只读的。 但是, LinkedList<T>以某种方式设法更改了这些属性。

LinkedList<T>如何做到这一点?

是使用反射还是通过内部设置器作弊?

这是LinkedListNode<T>的字段

public sealed class LinkedListNode<T> {
    internal LinkedList<T> list;
    internal LinkedListNode<T> next;
    internal LinkedListNode<T> prev;
    internal T item;

    // ...
}

如您所见,这些字段是内部的,因此可以由LinkedList<T> (或为此,由System程序集中的任何其他类)操纵它们,但是您不能从代码中做到这一点。

一个例子

private void InternalInsertNodeBefore(LinkedListNode<T> node, LinkedListNode<T> newNode) {
    newNode.next = node;
    newNode.prev = node.prev;
    node.prev.next = newNode;
    node.prev = newNode;            
    version++;
    count++;
}

LinkedListNode<T>中的字段listprevnext用内部访问修饰符标记。 内部类型/成员只能由同一程序集中的其他类型访问。 在这种情况下, LinkedListNode<T>LinkedList<T>都在系统程序集中。

如果我们看看它们的实际定义:

public sealed class LinkedListNode<T>
{
  internal LinkedList<T> list;
  internal LinkedListNode<T> next;
  internal LinkedListNode<T> prev;
  internal T item;
  ....
}

一个人总是可以在同一个类中更改数据,即使它的get-only属性

请参考以下示例:

class Property
{
    private string _name = "_name";
    public string Name
    {
        get
        {
            return _name;
        }
    }

    public void Foo()
    {
        _name = "foo";
    }


    static void Main(string[] args)
    {
        Property prop = new Property();

        Console.WriteLine(prop.Name);  // prints _name

        prop.Foo();

        Console.WriteLine(prop.Name); // prints foo
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM