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#对象生成的顺序是先静态化后实例化。当一个类被访问时,静态变量和静态构造函数最先被初始化,

接着是对象的实例化和构造函数执行。

 

 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值