none
在委托初始化的方法体使用本类其他的属性会提示“字段初始值设定无法引用非静态字段”错误,如何绕过? RRS feed

  • 问题

  • 我有一个类,其中一个属性是委托属性,也就是Action或Func类型,该类在构造函数中,会传入委托对象。

    这个类会在另一个类中以属性的方式声明并初始化,但是在本类的非方法体内中初始化委托对象,如果使用本类属性,会出现“字段初始值设定无法引用非静态字段”的错误,这个我能否避免呢,

    我想要直接在类中初始化委托对象,并在委托对象内使用本类属性。如果必须要在本类的某个方法体初始化委托对象,会有代码维护上的不便。

    比如下列代码

           
    class B {
    
       String vm="fghfg";
        A ab=new A(() => {
    
               dynamic a=  vm;
            
            });
    }
    

    vm是本类的字符串属性,ab是本类的一个自定义类型,其中有一个委托属性要在构造函数中初始化,在本类直接初始化,但是“dynamic a=  vm;” 这段代码中的"vm"提示错误“字段初始值设定无法引用非静态字段”,这个能否避免呢。


    2020年11月5日 1:38

全部回复

  • Hi Trina55,

    根据你的描述,我做了个简单的代码测试,我重现了你的问题,我建议你可以设置vm字符串为静态,这样错误就会消失。

    下面是具体的代码。

      public class ExampleA
        { 
         public Action action { get; set; }
            public ExampleA(Action ac )
            {
                this.action = ac;
            }           
    
        }
    
        public class ExampleB
        { 
         public ExampleA Exa { get; set; }
            static String vm = "fghfg";
            ExampleA ex = new ExampleA(() => {
    
                dynamic a = vm;
    
            });
    
        }

    如有问题,请随时告知我。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年11月5日 9:02
    版主
  • Hi Trina55,

    根据你的描述,我做了个简单的代码测试,我重现了你的问题,我建议你可以设置vm字符串为静态,这样错误就会消失。

    下面是具体的代码。be不行

      public class ExampleA
        { 
         public Action action { get; set; }
            public ExampleA(Action ac )
            {
                this.action = ac;
            }           
    
        }
    
        public class ExampleB
        { 
         public ExampleA Exa { get; set; }
            static String vm = "fghfg";
            ExampleA ex = new ExampleA(() => {
    
                dynamic a = vm;
    
            });
    
        }

    如有问题,请随时告知我。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    不行,委托以类属性进行初始化,其方法体内使用的本类属性必须是本类的实例属性,不能是本类静态属性。
    2020年11月6日 0:36
  • Hi Trian555,

    感谢您的反馈。

    根据我的进一步尝试,我发现不能按照你说的所说的那样,在实例化的时候去调用非静态的字段,这是不允许的。

    因此,我建议你要么尝试静态的方法,要么尝试在方法中去调用字段。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年11月6日 3:06
    版主