Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net-LinkedListNode如何使用<;T>';分配给谁的财产?_C#_.net_Vb.net - Fatal编程技术网

C# .Net-LinkedListNode如何使用<;T>';分配给谁的财产?

C# .Net-LinkedListNode如何使用<;T>';分配给谁的财产?,c#,.net,vb.net,C#,.net,Vb.net,根据.Net的LinkedListNode类的文档和元数据,只能获取其列表、Next和Previous属性。但是,LinkedList以某种方式设法更改这些属性 LinkedList是如何实现的 它是使用反射还是使用内部设置器进行欺骗?以下是: LinkedListNode中的列表、prev和next字段用内部访问修饰符标记。内部类型/成员只能由同一程序集中的其他类型访问。在这种情况下,LinkedListNode和LinkedList都在系统程序集中 如果我们看一下它们的实际定义: publi

根据.Net的
LinkedListNode
类的文档和元数据,只能获取其
列表
Next
Previous
属性。但是,
LinkedList
以某种方式设法更改这些属性

LinkedList
是如何实现的

它是使用反射还是使用内部设置器进行欺骗?

以下是:


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

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

public sealed class LinkedListNode<T>
{
  internal LinkedList<T> list;
  internal LinkedListNode<T> next;
  internal LinkedListNode<T> prev;
  internal T item;
  ....
}
公共密封类LinkedListNode
{
内部链接列表;
下一步是内部LinkedListNode;
内部LinkedListNode prev;
内部T项目;
....
}

即使是同一类的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
    }
}

这不是“把戏”。你可以随时查看.net源代码:@Bjørn RogerKringsjå谢谢,我忘了微软提供源代码。这表明,
内部
访问修饰符的使用是自由的。如果你想提交一个引用源代码的答案,我很乐意接受。这些类在
系统
程序集中,而不是
mscorlib
中,这并不试图回答这个问题。如上面的代码示例所示,LinkedList类在其方法AddFirst时也应该重置Next&Prev属性,调用AddLast等。您展示的是带有用户定义支持字段的属性演示,而不是如何从不同的类访问类属性的支持字段。但问题不是关于任何旧类,而是关于一对特定类。
public sealed class LinkedListNode<T>
{
  internal LinkedList<T> list;
  internal LinkedListNode<T> next;
  internal LinkedListNode<T> prev;
  internal T item;
  ....
}
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
    }
}