领域和财产之间有什么区别?
在C#中,什么使字段与属性不同,以及何时应该使用字段而不是属性?
属性公开字段。 字段应该(几乎总是)对类保持私有,并通过get和set属性进行访问。 属性提供了一个抽象级别,允许你改变字段,而不影响它们被使用你的类的东西访问的外部方式。
public class MyClass
{
// this is a field. It is private to your class and stores the actual data.
private string _myField;
// this is a property. When accessed it uses the underlying field,
// but only exposes the contract, which will not be affected by the underlying field
public string MyProperty
{
get
{
return _myField;
}
set
{
_myField = value;
}
}
// This is an AutoProperty (C# 3.0 and higher) - which is a shorthand syntax
// used to generate a private field for you
public int AnotherProperty{get;set;}
}
@Kent指出,属性不需要封装字段,他们可以在其他字段上进行计算,或用于其他目的。
@GSS指出,当访问属性时,您还可以执行其他逻辑,例如验证,这是另一个有用的功能。
面向对象的编程原则说,一个类的内部运作应该从外部世界隐藏起来。 如果你公开一个字段,你实际上暴露了该类的内部实现。 因此,我们使用Properties(或Java中的方法)包装字段,使我们能够更改实现而不会根据我们破坏代码。 看到我们可以在属性中放置逻辑,还可以让我们在需要时执行验证逻辑等。 C#3有可能令人困惑的autoproperties的概念。 这允许我们简单地定义属性,C#3编译器将为我们生成私有字段。
public class Person
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
public int Age{get;set;} //AutoProperty generates private field for us
}
一个重要的区别是接口可以有属性而不是字段。 对我来说,这强调了应该使用属性来定义类的公共接口,而字段应该用在类的私有内部工作中。 通常我很少创建公共领域,同样我也很少创建非公有财产。
链接地址: http://www.djcxy.com/p/3909.html