你能用短手定义一个'新'属性吗?

bai*_*alk 4 c# vb.net

我最近已经将一些代码从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'可以更轻松地写出这个的痛苦

Dar*_*rov 8

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)


qJa*_*ake 5

您无法在C#中创建属性并同时对其进行初始化.您只能使用字段执行此操作.

这是有效的,但不会初始化值(MyListnull):

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中的有效语法.