积极答复者
关于泛型示例的问题?

问题
-
微软泛型介绍(C# 编程指南)中http://msdn.microsoft.com/zh-cn/library/0x6a29h6.aspx的演示示例中
private Node next;
public Node Next
{
get { return next; }
set { next = value; }
}
是什么意思,为啥在自己类里面将自己类的类型定义字段,并封装成属性?
万物皆变,规则永恒。
答案
-
首先要了解静态与实例的区别:
- 静态字段为类所有,可被该类的所有实例共享
- 而实例变量只为该实例自身所有
对于链表中的节点,每个节点都必需指引它的下一个节点在哪,这十分显然每个节点的后续节点都不相同,因此必为实例变量。
- 已标记为答案 wavetekgroup 2011年4月20日 0:00
全部回复
-
公有属性是在任何外部类都可访问到的,如果有人不怀好意就会随意的修改的public字段,很危险的,但是如果改成private,就不能擅自修改,只能通过属性,而在属性里是可以加代码来判断别人付的值是否符合你的要求,不符合的可以直接拒绝赋值,这样就增加了安全性
Ellis_Wong- 已标记为答案 mldarkMember 2011年4月18日 11:52
- 取消答案标记 wavetekgroup 2011年4月19日 23:59
-
根据设计准则,所有的私有字段是不能被公开访问的,因此需要借助属性来访问和设置私有字段。这就是面向对象中的最简单的封装,这种特性称之为封装性。
Mark Zhou- 已标记为答案 mldarkMember 2011年4月18日 11:52
- 取消答案标记 wavetekgroup 2011年4月19日 23:59
-
你们没弄明白我的意思,我不是问字段的封装和属性!请看链接示例http://msdn.microsoft.com/zh-cn/library/0x6a29h6.aspx
我问的是下面Node类里面怎么又拿Node类本身作类型设置字段next,并且封装成属性Next,这是什么意思,这不回造成访问死循环吗?
// type parameter T in angle brackets
public class GenericList<T>
{
// The nested class is also generic on T.
private class Node
{
// T used in non-generic constructor.
public Node(T t)
{
next = null;
data = t;
}private Node next;
public Node Next
{
get { return next; }
set { next = value; }
}// T as private member data type.
private T data;// T as return type of property.
public T Data
{
get { return data; }
set { data = value; }
}
}private Node head;
// constructor
public GenericList()
{
head = null;
}// T as method parameter type:
public void AddHead(T t)
{
Node n = new Node(t);
n.Next = head;
head = n;
}public IEnumerator<T> GetEnumerator()
{
Node current = head;while (current != null)
{
yield return current.Data;
current = current.Next;
}
}
}
万物皆变,规则永恒。 -
首先要了解静态与实例的区别:
- 静态字段为类所有,可被该类的所有实例共享
- 而实例变量只为该实例自身所有
对于链表中的节点,每个节点都必需指引它的下一个节点在哪,这十分显然每个节点的后续节点都不相同,因此必为实例变量。
- 已标记为答案 wavetekgroup 2011年4月20日 0:00