属性如何提供封装?

时间:2016-04-16 00:18:08

标签: c# c#-4.0 c#-3.0 c#-2.0

我开始学习C#,但是当set方法没有进行任何操作,验证等时,我不明白属性如何提供封装。我的代码:

class SitePage {
private string _specialString;
public string SpecialString
{
get { return _specialString; }
set { _specialString = value; }
}}

这里,我们使用的是SpecialString属性,而不是使用字段_specialString。基本上,我们不是暴露这个领域,而是暴露财产。为什么要隐藏字段但将属性公开给客户端类?

3 个答案:

答案 0 :(得分:1)

使用c#属性时,编译器会自动在后台创建该字段。因此,只要您获取属性,它就会使用一种方法来检索存储在基础字段中的值。当您设置属性时,它正在设置该基础字段。

当您需要简单的实现时,使用{get; set;}语法本质上是一种快捷方式。

真正的好处是当你需要控制 获取或设置这些值时。

例如,您可以使用以下语法:

<button class="btn btn btn-md" type="submit">Send Message &nbsp;<i class="fa fa-paper-plane fa-1x" style="color: white;"></i></button>

这将使您可以从类外部检索属性的值,但是您只能使用类自己的内部逻辑在内部设置值。

或者你可以这样做:

public SpecialString{get;private set;}

或者,当您获得或设置某个属性时,您可以触发其他方法。将财产视为守门人。您可以设置所需的任何规则,以便让数据传入或传出。

答案 1 :(得分:0)

相当多的想法是你通常想要返回一份副本。当您处理税务信息等敏感数据时,这变得非常重要。您不希望任何人或任何人能够直接访问某人的税务信息。很多程序都不需要像这样的系统,但仍然被认为是好习惯,因为它让你养成了习惯。

通过这样的中介可以确保一切都是故意完成的,并且允许您只进行一些错误检查,但不要强制它在文件中本地运行。例如,如果你有一个绝不应该是负数的数字,你可以在set方法中包含一个错误检查,而不是在你使用变量的任何地方都这样做。

如果您需要更多细节或示例,请告诉我们。我不觉得我解释得那么好,但我希望能够很好地解释它,以便你大致了解为什么你会这样编码。

答案 2 :(得分:0)

通常,属性构成公共接口,而字段是后备数据。您也可以通过以下方式编写自动实现的属性:

greeting

这样,编译器将自动构建支持字段。

将公共属性作为私有后备字段的接口还有其他优点,例如当您想要查看值是否已更改并引发事件时。

public string SpecialString { get; set; }