1.私有字段和公有字段的比较

类中的私有字段只能在类的内部访问,而对类的公有字段的访问却不受限制。

在以前,为了封装,程序中会尽量少使用公有字段,因为使用公有字段的话,会让程序失去控制权。所以程序中会大量使用私有字段。不过,使用私有字段时,需要程序为私有字段定义额外的取值方法和赋值方法。

下面的示例代码定义了一个私有字段age来表示年龄,同时定义了取值方法GetAge()及赋值方法SetAge()供外部来调用,通过这两个方法,外部的对象就可以来访问私有变量age了。

private int age;
public void SetAge(int age)
{
this.age = age;
}
public int GetAge()
{
return this.age;
}

使用这种方法时,在SetAge()方法和GetAge()方法中可以增加相应的控制代码来防止外部对age的非法访问。如使用下面的代码就可以避免将一个负数赋值给age,因为一个人的年龄不可能小于0。

public void SetAge(int age)
{
if (age > 0)
{
this.age = age;
}
}

不过这种方法比起使用公有字段,略显麻烦。

要是使用公有字段的话,则只需使用下面的定义代码(就短短一行哦,不过安全性就不要再想了):

public int Age;

这样,在类的外部就可以使用下面的代码来访问这个公有字段了:

x.Age = 10;//x为模拟类实体

而在类的外部,私有字段的访问就必须通过赋值方法和取值方法来完成了。

x.SetAge(10); //x为模拟类实体

虽然访问私有字段与公有字段都是短短一行代码,但是访问私有字段却要通过一个方法,感觉还是什么了点(至于是什么,天知道),呵呵。

下面简单总结一下:

使用“私有字段+赋值方法+取值方法”的方式略显麻烦但是可以保证字段的安全性。

而使用公有字段方式简单但是却无法保证字段的安全性。

很显然,安全性肯定要比简单性对程序影响深远。这也就是以前很少使用公有字段的原因了。

难道我们就不能同时兼顾公有字段的简单性和私有字段的安全性吗。

答案是有的,属性满足我们的要求。

2.属性

在介绍属性前,先给出表示年龄的属性代码,如下:

private int age;
public int Age
{
get
{
return this.age;
}
set
{
if (value > 0)
{
this.age = value;
}
}
}

属性的访问代码如下:

x.Age = 10;//x为模拟类实体

是不是很熟悉啊,对的,和公有字段的访问方式一摸一样。

并且,在给属性赋值时,会调用属性的set方法(属性提供的set方法被称为set访问器,get方法被称为get访问器),在set方法中可以增加相应的控制代码来防止外部对私有字段age的非法访问。这与为私有字段添加的SetAge()方法的作用相同。

可见,属性就是我们需要的,同时兼顾了公有字段的简单性和私有字段的安全性。

最后,介绍一下属性的概念:属性是一个或一对方法(类似于为私有字段添加的赋值方法和取值方法),在客户机看来,他们是一个字段(类似于公有字段)。当属性定义中省略set访问器时,属性则为只读属性;当属性定义中省略get访问器,属性就为只写属性。

好了,就写到这里了。

C#属性总结的更多相关文章

  1. jqu

    1 /*2 * 说明:3 * 本源代码的中文注释乃Auscarlin呕心沥血所作.旨在促进jQuery的传播以及向广大jQuery爱好者提供一个进阶4 *的途径,以让各位更加深入地了解jQuery,学 ...

  2. js-静态、原型、实例属性

    本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...

  3. 探究@property申明对象属性时copy与strong的区别

    一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...

  4. CSS HTML元素布局及Display属性

    本篇文章主要介绍HTML的内联元素.块级元素的分类与布局,以及dispaly属性对布局的影响. 目录 1. HTML 元素分类:介绍内联元素.块级元素的分类. 2. HTML 元素布局:介绍内联元素. ...

  5. CSS float 浮动属性

    本篇主要介绍float属性:定义元素朝哪个方向浮动. 目录: 1. 页面布局方式:介绍文档流.浮动层以及float属性. 2. float:left :介绍float为 left 时的布局方式. 3. ...

  6. CSS Position 定位属性

    本篇文章主要介绍元素的Position属性,此属性可以设置元素在页面的定位方式. 目录 1. 介绍 position:介绍position的值以及辅助属性. 2. position 定位方式:介绍po ...

  7. npm package.json属性详解

    概述 本文档是自己看官方文档的理解+翻译,内容是package.json配置里边的属性含义.package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象.其中很多属性可以通过np ...

  8. JavaScript特性(attribute)、属性(property)和样式(style)

    最近在研读一本巨著<JavaScript忍者秘籍>,里面有一篇文章提到了这3个概念. 书中的源码可以在此下载.我将源码放到了线上,如果不想下载,可以直接访问在线网址,修改页面名就能访问到相 ...

  9. 【用户交互】APP没有退出前台但改变系统属性如何实时更新UI?监听系统广播,让用户交互更舒心~

    前日,一小伙伴问我一个问题,说它解决了半天都没解决这个问题,截图如下: 大概楼主理解如下: 如果在应用中有一个判断wifi的开关和一个当前音量大小的seekbar以及一个获取当前电量多少的按钮,想知道 ...

  10. jQuery的属性

    The Write Less , Do More ! jQuery的属性 1. attr(name|properties|key,value|fn) : 设置或返回被选元素的属性值 ①获取属性 < ...

随机推荐

  1. C++ - Operator Precedence

    The following table lists the precedence and associativity of C++ operators. Operators are listed to ...

  2. TPL异步并行编程之简单使用

    并行编程一直是一个老生常谈的话题 在这里记录一下TPL编程,这在net4.0 微软就已经提供了多核时代下的并行库,其中最核心的最常用的也就是Task 一 Task是什么 Task可以简单的理解为一个线 ...

  3. flex中在basewidget中不能使用图表组件问题

    参考 http://blog.sina.com.cn/s/blog_51e3d0e70101hljz.html

  4. 与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成

    原文:与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成 [索引页][源码下载] 与众不同 win ...

  5. 【Demo 0016】SQLite 数据库

    本章学习要点:       1.  熟悉SQL语句:       2.  掌握SQLit库的基本用法;        3.  掌握SQLite封装:

  6. Swift - 告警框(UIAlertView)的用法

    1,下面代码创建并弹出一个告警框,并带有“取消”“确定”两个按钮 (注:自IOS8起,建议使用UIAlertController) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...

  7. linux下安装node.js

    1.下载 wget http://nodejs.org/dist/v0.10.32/node-v0.10.32-linux-x64.tar.gz 2.解压 tar -xvf node-v0.10.32 ...

  8. Eclipse添加和查看书签

    添加书签: 在编辑框左边栏右击 > Add Bookmark > 编辑书签名称(可以直接使用默认名称)> OK 查看书签: Window > Show View > Ot ...

  9. haproxy 看到的是https,后台是http的原因

    https://www.zjtest6.com/admin/api/menu haproxy 日志: Jun 24 13:23:02 localhost haproxy[23205]: 192.168 ...

  10. thinkphp 3.2.3 入门示例2(URL传参数的几种方式)

    原文:thinkphp中URL传参数的几种方式 在thinkphp中,url传参合asp.net中原理类似,下面就单个参数和多个参数传递方式进行一个简单讲解 1.传单个参数 单个参数这种比较简单,例如 ...