public class BinaryTree<T>
{
public BinaryTree(T item)
{
Item = item;
} public T Item
{
get { return _Item; }
set { _Item = value}
} private T _Item; public Pair<BinaryTree<T>> SubItems
{
get { return _SubItems; }
set { _SubItems = value; }
} private Pair<BinaryTree<T>> _SubItems;
}
《C#本质论》P312页的代码。
为什么这里的构造函数里没有给 _SubItems 赋值。
比如说窗体的背景色 也是一个属性
你可以给他赋值 他就会随着你的赋值改变
也可以选择不赋值仅仅一个属性而已
_SubItems是字段啊。这个没有赋值啊。
看这段代码: public struct Pair<T>
{
private T _Second;
private T _First; public T Second
{
get { return _Second;}
set { _Second = value; }
} public T First
{
get { return _First; }
set { _First = value;}
} public Pair(T first)
{
_First = first; //没给 _Second 赋值,不能通过编译。
}
}
像这个不赋值就不能通过编译,为什么上面的不赋值却能通过呢
楼主可以看看本质论P239页,“幸运的是”这一段。至于类中字段是不是必须赋值。这个问题我在
http://topic.csdn.net/u/20100705/20/48a92013-541d-4e5f-a570-4fc0a40f7cac.html中已经探讨过了。
struct Score
{
public string Name;
public int Language;
public int Mathematics;
public int Total;
public int Rank;
}
class Program
{
public static void Main()
{
Score s = new Score();
Console.WriteLine(s.Name);
Console.ReadKey(true);
}
}
以上代码不会出错。
1:无论在struct中还是在class中如果字段没有赋值而直接用,编译器是不会报错的。
2:而在struct中如果有带参数构造器,则必须对struct中的所有字段进行初始化。
3:局部变量没有赋值而直接使用,编译器会报错。
额,我试了下, public class Pair<T> //把struct改为class可通过
{
private T _Second;
private T _First; public T Second
{
get { return _Second;}
set { _Second = value; }
} public T First
{
get { return _First; }
set { _First = value;}
} public Pair(T first)
{
_First = first; //没给 _Second 赋值,通过编译。
}
}struct 的字段必须赋值,class 的字段可以不赋值。不过这是为什么?
一个英文的,一个翻译的:
http://apicode.gicp.net/class.do?api=selectByfatherIndex&father=255
http://apicodecn.gicp.net/class.do?api=selectByfatherIndex&father=255
嗯,你说的对。为什么struct必须在有参构造函数里给每个字段赋值,而class可以在有参构造函数里不必给每某个字段赋值呢?