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

时间:2013-05-15 15:43:16

标签: c# vb.net

我最近已经将一些代码从VB转换为C#,我注意到在VB中你可以用速记启动一个新的obj,这在C#中是可能的,还是你必须使用支持字段。

Public Property MyList As New List(Of String)

似乎C#等价物是:

private List<String> _myList = new List<string>();
public List<String> MyList
{
    get { return _myList; }
    set { _myList = value; }
}

注意*使用快捷命令'propfull'

可以更轻松地写出这个的痛苦

3 个答案:

答案 0 :(得分:8)

  

等效的C#?

C#还支持auto-implemented properties,它不需要支持字段,但不会自动为此属性赋值:

public List<string> MyList { get; set; }

编译器将发出相应的后备字段。您还可以为getter和setter指定不同的访问修饰符:

public List<string> MyList { get; private set; }

如果你想使用这个auto属性同时实例化属性,那么,不,这是不可能的,但是你可以在类的构造函数中做到这一点:

public class MyClass
{
    public MyClass()
    {
        this.MyList = new List<string>();
    }

    public List<string> MyList { get; set; }
}

答案 1 :(得分:5)

您无法在C#中创建属性并同时对其进行初始化。你只能用字段来做这件事。

这是有效的,但初始化值(MyList将为null):

public List<string> MyList { get; set; }

这是有效的(但它是一个字段,而不是属性):

public List<string> MyList = new List<string>();

这是有效:

public List<string> MyList { get; set; } = new List<string>();

在类中创建属性然后在该类的构造函数中初始化它们是很常见的。


更新:现在这是C# 6.0中的有效语法。

答案 2 :(得分:-1)

在C#中只需:

public List<string> MyList { get; set; }