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

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

 

 

    原文作者:TinanBao
    原文地址: https://blog.csdn.net/TinanBao/article/details/42875101
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞