zoukankan      html  css  js  c++  java
  • 字段初始值无法引用非静态字段、方法或属性

    一上代码,后解释

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

  • 相关阅读:
    Tomcat 参数调优
    weBDrriver API接口方法小记
    cookie、session、sessionid 与jsessionid
    性能测试知多少---性能需求分析
    nvl()与regexp_replace()
    Action类的工作机制
    创建视图组件
    struts 与 Java Web应用简介
    java入门2
    java入门1
  • 原文地址:https://www.cnblogs.com/May-day/p/6755324.html
Copyright © 2011-2022 走看看