首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >属性的c#类声明

属性的c#类声明
EN

Stack Overflow用户
提问于 2017-09-01 17:26:44
回答 2查看 96关注 0票数 0

有没有办法写这个,这样我就不必显式地声明字段_D

  • 如何在实现类时绕过= new List<T>()

我所拥有的:

代码语言:javascript
运行
复制
class c {
    private List<T> _D = new List<T>();
    public List<T> D { get { return _D; } set { _D = value; } }
}

我想要的:

代码语言:javascript
运行
复制
class c {
    public List<T> D { get; set; }
}

声明构造函数以将属性分配为List<T>不是更好吗?如:

代码语言:javascript
运行
复制
class c {
    c() { D = new List<t>(); }
    public List<t> D { get; set; }
}

在实现属性和分配初始值时,今天的最佳实践是什么?

这三个都在技术上是正确的。我在我要接手的代码中找到了第一个。在声明所有属性支持字段的原始代码后面,我找不到任何用途。我认为声明备份字段不是最佳实践,因为c# v3 ..。除非您实际上要在类的方法中的某个地方使用私有字段,这种情况在这里不会发生。

您可以将初始List<>分配给属性为“使用类中的某个地方的属性”。或者你可以把它看成‘毫无意义的,像我的第三个例子那样去做’。

这些天哪一种做法被普遍认为是最佳做法?

EN

回答 2

Stack Overflow用户

发布于 2017-09-01 17:43:25

从C# 6开始,您可以这样做:

代码语言:javascript
运行
复制
public IList<int> Prop1 { get; set; } = new List<int> { 1, 2, 3 }; 
票数 5
EN

Stack Overflow用户

发布于 2017-09-01 17:49:16

在.NET中有几种方法可以实现相同的功能,还有最佳实践和建议。这取决于您对对象和属性的需求和责任。我看到了一个链接到编程指南的评论,这是很棒的。这些只是几个例子。

代码语言:javascript
运行
复制
public class C<T>
{
    public List<T> D { get; set; } = new List<T>();
}

public class C2
{
    public IReadOnlyList<int> D { get; private set; }

    public C2()
    {
        D = new List<int>();
    }
}

public class C3
{
    private List<int> _d = null;

    public List<int> D
    {
        get
        {
            return _d ?? new List<int>();
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46005298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档