我应该使用公共属性和私有字段还是公共字段来存储数据?

15 浏览
0 Comments

我应该使用公共属性和私有字段还是公共字段来存储数据?

在我看到的大部分代码中(如SO、thecodeproject.com和我自己的代码),我发现每个类中都会为每个私有字段创建公共属性,即使它们只是最基本的get; set;类型,如下所示:\n

private int myInt;
public int MyInt 
{
     get { return myInt; }
     set { myInt = value; }
}

\n我的问题是:这与以下代码有何不同:\n

public int MyInt;

\n如果我们应该使用属性而不是公共字段,为什么在这种特定情况下我们应该使用它们?(我并不是指更复杂的例子,其中getter和setter实际上会执行特殊操作,或者只有一个get或set(只读/只写),而不仅仅是返回/设置私有字段的值)。这似乎没有增加任何额外的封装,只是在IntelliSense中提供了一个漂亮的图标,并放置在类图中的一个特殊部分!

0
0 Comments

当你在类中创建私有字段name和一个简单的公共属性Name,该属性实际上获取并设置name字段的值时,如果你在类外的各处使用该属性。然而有一天你决定这个类的Name属性实际上应该引用lastName字段(或者你想返回一个字符串"My name: "+name),你只需更改属性内部的代码:

public string Name
{
   get { return lastName; //return "My name: "+name; }
}

如果你在外部代码中使用的是公共字段name,那么你将不得不在使用它的每个地方将name更改为lastName。

问题的原因是,在类的设计中,使用公共字段还是使用公共属性来访问数据。在上述示例中,使用公共属性可以更轻松地更改属性的实现细节,而不会对外部代码产生影响。如果使用公共字段,则需要在所有使用到该字段的地方都进行相应的更改。

解决方法是使用公共属性而不是公共字段来访问数据。公共属性提供了更好的封装性和灵活性,允许在不影响外部代码的情况下更改属性的实现细节。相比之下,公共字段更加直接和简单,但也更容易造成对类的依赖,使代码更脆弱。

因此,在设计类时,应该优先考虑使用公共属性来访问数据,以便更好地控制类的内部实现,并提供更好的代码可维护性和扩展性。

0
0 Comments

在编写代码时,有时会面临选择使用公共属性和私有字段还是公共字段来存储数据的问题。下面是这个问题出现的原因以及解决方法的整理。

首先,我们来看一下这个问题的三个原因:

1. 你不能像使用属性一样在子类中重写字段。

2. 你可能最终需要更复杂的getter或setter,但如果是字段,改变它会破坏API。

3. 惯例。这就是人们通常的做法。

其实还有更多原因,只是我现在想不起来了。

在.NET 3.x中,你可以使用自动属性来简化代码,像这样:

public int Age { get; set; }

而不是像以前一样自己声明私有字段,像这样:

private int age;
public int Age
{
    get { return age; }
    set { age = value; }
}

这种方式就像创建一个字段一样简单,而且不会破坏API。

某些情况下字段不能被序列化,但实际上不是这样的。私有字段在XML序列化时无法被序列化,但XML序列化在当今已经算是一种"遗留"技术了。数据合同序列化器对私有字段没有问题。

总之,选择使用公共属性和私有字段还是公共字段来存储数据是个人偏好和根据具体情况而定的。使用属性的好处是可以方便地添加更复杂的getter和setter,并且符合编码习惯。而使用字段则更加简洁明了。无论选择哪种方式,都需要根据具体情况进行权衡和选择。

0
0 Comments

在编程中,我们经常需要决定是使用公共属性和私有字段,还是直接使用公共字段来处理数据。这个问题的出现有以下几个原因,以及相应的解决方法。

首先,反射在处理变量和属性时有所不同,如果我们依赖于反射,使用所有的属性会更容易。这意味着如果我们需要使用反射来访问对象的成员,我们应该使用属性而不是字段。

其次,无法对变量进行数据绑定。数据绑定是一种将数据与用户界面元素关联起来的常见方法,然而,如果我们使用字段而不是属性,就无法直接对其进行数据绑定。

最后,将一个变量更改为属性是一个破坏性的改变。这意味着一旦我们将一个字段更改为属性,所有依赖于该字段的代码都需要进行相应的修改。这可能会导致许多麻烦和工作量。

因此,使用属性比使用字段更可取,因为我们可以在属性的get和set块中更改语句,而无需更改依赖于该属性的类。这提供了更大的灵活性和可维护性。

总结起来,我们应该尽量使用属性而不是字段来处理数据。虽然这可能会增加一些额外的工作量,但它提供了更好的灵活性和可维护性。

0