初始化私有成员C#初始化、成员

2023-09-06 14:44:42 作者:浮生如梦

我有需要的对象被创建时要进行初始化的两个专用列表。第二列表是依赖于第一个。我能做到这一点是这样的:

 公共类MyClass的
  {
      私人列表< T> myList上=新的名单,其中,T>();
      私人ReadOnlyCollection还< T> myReadOnlyList = myList.AsReadOnly;

      ...
  }
 

第二个列表是只读围绕第一个包装。

我能想到的是C#将这个顺序在每次运行时执行这两条线?

或者我应该把这个初始化的构造?

编辑: 对不起,愚蠢的问题。我试了一下,编译器说:

 错误1字段初始不能引用
             非静态字段,方法或属性...
 

解决方案 C 6.0特性 快来围观

没有。如果你想基于类内的一个独立的变量初始化变量,你需要为此在构造函数中:

 公共类MyClass的
{
    私人列表< T> myList上=新的名单,其中,T>();
    私人ReadOnlyCollection还< T> myReadOnlyList;
    公共MyClass的()
    {
        myReadOnlyList = myList.AsReadOnly;
    }

}
 

内联intializers总是在静态情况下,这意味着你有你的类中没有访问成员变量运行。内部构造的,但是,你可以做到这一点。你的构造,这就是为什么我可以离开该列表初始化到位前,将发生的内联初始化。

I have two private lists that need to be initialized when object is created. Second list is dependent on first one. Can I do it like this:

  public class MyClass
  {
      private List<T> myList = new List<T>();
      private ReadOnlyCollection<T> myReadOnlyList = myList.AsReadOnly;

      ...
  }

Second list is read only wrapper around first one.

Can I expect that c# will execute this two lines in this order each time it is run?

Or should I put this initializations in constructor?

Edit: Sorry for stupid question. I tried it and compiler says:

Error   1   A field initializer cannot reference the 
             non-static field, method, or property...

解决方案

No. If you want to initialize a variable based on a separate variable within the class, you need to do this in the constructor:

public class MyClass 
{ 
    private List<T> myList = new List<T>(); 
    private ReadOnlyCollection<T> myReadOnlyList;
    public MyClass()
    {
        myReadOnlyList = myList.AsReadOnly; 
    }

} 

Inlined intializers are always run in a static context, which means you have no access to member variables within your class. Inside of a constructor, however, you can do this. The inlined initializers will occur before your constructor, which is why I could leave the list initialization in place.