C#类中变量初始化:字段初始值⽆法引⽤⾮静态字段、⽅法
或属性
字段初始值⽆法引⽤⾮静态字段、⽅法或属性
刚学习C#时,在类内定义变量时,经常会出现标题内容的问题,即字段初始值⽆法引⽤⾮静态字段、⽅法或属性。这是为什么呢?
下⾯我们拿⼀个⼩程序来举例⼦。关于的ArrayList 实例t的3种不同的⽣成⽅法。
class collection
{
/// <summary>
///ArrayList 可以动态地添加和删除元素,可以将ArrayList类看做是扩充了功能的数组,但它不同于数组。
///ArrayList与数组的区别。
///数组的容量是固定的,⽽ArrayList的容量可以根据需要⾃动扩充。
数组定义时初始化
///ArrayList提供添加,删除和插⼊某⼀范围元素的⽅法,但在数组中,只能依次获取或设置⼀个元素的值。
///ArrayList提供将只读和固定⼤⼩的包装返回集合的⽅法,⽽数组不提供。
///ArrayList只是⼀维的形式,⽽数组可以是多维的。
/// </summary>
ArrayList arraylist = new ArrayList();
ArrayList arraytest1 = new ArrayList(4);//4 means capacity
string[] test = new string[] { "0","1","2"};
ArrayList arraytest2 = new ArrayList(test);
}
对于第三种⽅法,即
string[] test = new string[] { "0","1","2"};
ArrayList arraytest2 = new ArrayList(test);
此时就会提⽰标题内容的错误。
这是因为在C#中,规定在类内部只能定义属性或者变量,并初始化,不能直接变量引⽤变量。
如例,在类collection中,定义了⼀个string 类型变量 test,⽽在定义ArrayList 类型变量 arraytest2时,引⽤了test。
这是因为c#中变量的初始化优先于构造函数。
string testA="world";
string testB="Hello "+testA;
这⾥在⽣成testB对象时,由于testA要调⽤string 类的构造函数,⽽变量的初始化优先于构造函数,所以会报错。
⽽若声明为静态变量则可以,是因为C#对象⽣成的顺序是先静态化后实例化。当⼀个类被访问时,静
态变量和静态构造函数最先被初始化,
接着是对象的实例化和构造函数执⾏。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。