C# 类初始化-属性与字段

C# 类初始化-属性与字段,c#,class,properties,initialization,field,C#,Class,Properties,Initialization,Field,我想知道类初始化的最佳实践是什么 可以这样写: private myClass mc = new myClass(); 或: 我总是倾向于将其用作字段。将类用作属性是否有任何缺点?我在谷歌上做了一些搜索,但没有一个搜索结果能很好地回答这个问题。如果它是私有的,那么把它变成一个财产并没有什么好处。我会把它当作一块地。我使用属性作为API与其他类通信的一种方式。在第二个示例中使用属性是不必要的。你可以这样写: private myClass mc; public Foo() { mc =

我想知道
类初始化的最佳实践是什么

可以这样写:

private myClass mc = new myClass();
或:


我总是倾向于将其用作
字段
。将类用作
属性是否有任何缺点?我在谷歌上做了一些搜索,但没有一个搜索结果能很好地回答这个问题。

如果它是私有的,那么把它变成一个财产并没有什么好处。我会把它当作一块地。我使用属性作为API与其他类通信的一种方式。

在第二个示例中使用属性是不必要的。你可以这样写:

private myClass mc;

public Foo()
{
    mc = new myClass();
}

属性应该是getter/setter,这意味着它们提供了信息隐藏机制的一部分。将它们设置为私有并没有多大作用,因为类中的所有方法都可以看到私有成员。

我提供了第一种方法:

私有myClass mc=新myClass()

因为:

  • 私有财产没有好处
  • 如果创建另一个构造函数,则会复制初始化代码,除非创建某个Init方法或调用this(),而这并不像初始化字段那么简单

第三个选项的可能副本是您可以编写
私有myClass mc;public Foo(){mc=new myClass();}
这不是重复的。我忽略了这个属性是私有的这一事实,因为我以前从未见过有人这样做。私有属性绝对没有任何好处。@DavidArno我故意将它们设置为private,因为我想知道如何在类本身中进行
类初始化。根据答案,我将继续使用
字段方式
:)@DeMama对您有好处:)如果存在一些逻辑,甚至是类内部的逻辑,我会将其作为属性,这些逻辑应该与属性隔离。然而,对于自动实现的属性,我同意这并没有实际的好处。
private myClass mc;

public Foo()
{
    mc = new myClass();
}