我最近已经将一些代码从VB转换为C#,我注意到在VB中你可以用速记启动一个新的obj,这在C#中是可能的,还是你必须使用支持字段.
Public Property MyList As New List(Of String)
Run Code Online (Sandbox Code Playgroud)
似乎C#等价物是:
private List<String> _myList = new List<string>();
public List<String> MyList
{
get { return _myList; }
set { _myList = value; }
}
Run Code Online (Sandbox Code Playgroud)
注意*使用快捷命令'propfull'可以更轻松地写出这个的痛苦
C#等价吗?
C#还支持auto-implemented properties哪些不需要支持字段但不自动为此属性赋值:
public List<string> MyList { get; set; }
Run Code Online (Sandbox Code Playgroud)
编译器将发出相应的后备字段.您还可以为getter和setter指定不同的访问修饰符:
public List<string> MyList { get; private set; }
Run Code Online (Sandbox Code Playgroud)
如果你想使用这个auto属性同时实例化属性,那么,不,这是不可能的,但是你可以在类的构造函数中做到这一点:
public class MyClass
{
public MyClass()
{
this.MyList = new List<string>();
}
public List<string> MyList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您无法在C#中创建属性并同时对其进行初始化.您只能使用字段执行此操作.
这是有效的,但不会初始化值(MyList将null):
public List<string> MyList { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是有效的(但它是一个字段,而不是属性):
public List<string> MyList = new List<string>();
Run Code Online (Sandbox Code Playgroud)
这是不正确的:
public List<string> MyList { get; set; } = new List<string>();
Run Code Online (Sandbox Code Playgroud)
在类中创建属性然后在该类的构造函数中初始化它们是很常见的.
更新:现在这是C#6.0中的有效语法.