首页 > 代码库 > C#变量初始化问题:字段初始值无法引用非静态字段、方法或属性
C#变量初始化问题:字段初始值无法引用非静态字段、方法或属性
一上代码,后解释
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestStatic { class Program { static void Main(string[] args) { Console.WriteLine("解决字段初始化无法引用非静态字段问题"); A a = new A(new B()); Console.WriteLine(a.restrs); //利用属性调用就可以解决 } } public class A { public A(B obj) { this.str = obj; Console.WriteLine(str.Say2()); //利用构造函数也可以解决 } public B str { get; set; } //string a = str.Say2(); //字段初始化无法引用非静态字段 //public string restrs = restr(); //字段初始化无法引用非静态字段 //而通过属性调用就可以编译通过 public string restrs { get { return restr(); } set { restrs = value; } } public string restr() { return "1》利用属性调用就可以解决"; } } public class B { public B() { } public string Say2() { return "2》利用构造函数也可以解决"; } } }
二,字段初始化无法引用非静态字段,原因:
1》C#语法规则:在 C# 中不允许使用未初始化的变量。
2》属性内存和变量内存的分配的时间不一样。 属性是用的时候分配,而变量是在类初始化时候分配。
3》在实例一个类时,因为静态字段赋值动作已经在静态构造函数中完成,实例化的字段会在非静态构造函数中实例化,而两者的时间前后是静态构造函数执行早于非静态构造函数,也洽洽是这个原因会造成两个问题:
1,当你用非静态字段给静态字段赋值时,字段一直为空错误
2,当你在类中给非静态赋值时:字段初始化无法引用非静态字段
三,解决方法:
1》因为初始化的时候顺序问题造成的问题,我们可以将对应代码放到当前需要赋值的类的构造函数中执行。
2》使用属性的get来赋值,如上例子
C#变量初始化问题:字段初始值无法引用非静态字段、方法或属性
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。