博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字段初始值无法引用非静态字段、方法或属性
阅读量:6633 次
发布时间:2019-06-25

本文共 1499 字,大约阅读时间需要 4 分钟。

一上代码,后解释

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来赋值,如上例子

转载于:https://www.cnblogs.com/May-day/p/6755324.html

你可能感兴趣的文章
ubuntu16.04 双网卡绑定
查看>>
LVS+Keepalived实现高可用群集
查看>>
单目运算符重载为友元函数
查看>>
Vmware vSphere常见问题汇总(三)
查看>>
基于OHCI的USB主机 —— USB设备端口特性清除
查看>>
微软宣布MIX11将发布Silverlight 5 Beta
查看>>
2个sqlserver数据库实例之间数据导入导出
查看>>
Oracle数据库安全资源-2
查看>>
大牛教你查库暴库
查看>>
[推荐]在线测试你的网速
查看>>
Android错误:java.lang.ExceptionInInitializerError,java.lang.UnsatisfiedLinkError,
查看>>
Oracle LOCK内部机制及最佳实践系列(五)给出一个导致死锁的SQL示例
查看>>
storm写redis问题小结
查看>>
SAP BASIS 基础教程 SAP BASIS daily Job SM13,SM37,SM21
查看>>
Openstack-make-centos-image
查看>>
活动目录服务的配置与管理(7) 利用组策略实现文件夹重定向
查看>>
JVM探索
查看>>
Keras缔造者:François Chollet专访
查看>>
CSS控制ul的基础代码
查看>>
添加ESXi主机并创建虚拟机
查看>>