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