c# - 创建对象的最佳方式

标签 c# .net oop constructor instance

这似乎是一个非常愚蠢和初级的问题,但我试图用谷歌搜索它,但找不到满意的答案,

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Person(){}
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    //Other properties, methods, events...
}

我的问题是,如果我有这样的类,创建对象的最佳方法是什么?

Person p=new Person("abc",15)

Person p=new Person();
p.Name="abc";
p.Age=15;

这两种方法有什么区别,创建对象的最佳方式是什么?

最佳答案

决定是否需要一个不可变对象。

如果您将 public 属性放入您的类中,那么您的代码中的每个实例的状态都可以随时更改。所以你的类(class)可能是这样的:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Person(){}
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    //Other properties, methods, events...
}

在这种情况下,Person(string name, int age) 构造函数就没那么有用了。

第二个选项是实现一个不可变 类型。例如:

public class Person
{
    public string Name { get; private set; }
    public int Age { get; private set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    //Other properties, methods, events...
}

现在您有了一个在创建时为实例设置状态的构造函数,一次。请注意,现在属性的 setter 是 private,因此您无法在对象实例化后更改状态。

最佳实践是尽可能每次都将类定义为不可变的。要了解不可变类的优势,我建议您阅读此 article .

关于c# - 创建对象的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14747095/

相关文章:

c# - 从 javascript 更改标签文本

c# - 在哪里设置 MVC 注册链接过期设置?

c# - Parallel.Invoke 不等待异步方法完成

c# - 了解 .Net 泛型 - 银行域

c++ - 属性列表还是传承丛林?

c# - 如何在 C# 中通过 ref 传递它?

c# - WCF 是否在后台优化了客户端的连接?

c# - 使用嵌套命名空间

java - 覆盖现有的对象图?

c# - 私有(private)成员访问的设计模式?