C#属性总结
类中的私有字段只能在类的内部访问,而对类的公有字段的访问却不受限制。
在以前,为了封装,程序中会尽量少使用公有字段,因为使用公有字段的话,会让程序失去控制权。所以程序中会大量使用私有字段。不过,使用私有字段时,需要程序为私有字段定义额外的取值方法和赋值方法。
下面的示例代码定义了一个私有字段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#属性总结的更多相关文章
- jqu
1 /*2 * 说明:3 * 本源代码的中文注释乃Auscarlin呕心沥血所作.旨在促进jQuery的传播以及向广大jQuery爱好者提供一个进阶4 *的途径,以让各位更加深入地了解jQuery,学 ...
- js-静态、原型、实例属性
本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...
- 探究@property申明对象属性时copy与strong的区别
一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...
- CSS HTML元素布局及Display属性
本篇文章主要介绍HTML的内联元素.块级元素的分类与布局,以及dispaly属性对布局的影响. 目录 1. HTML 元素分类:介绍内联元素.块级元素的分类. 2. HTML 元素布局:介绍内联元素. ...
- CSS float 浮动属性
本篇主要介绍float属性:定义元素朝哪个方向浮动. 目录: 1. 页面布局方式:介绍文档流.浮动层以及float属性. 2. float:left :介绍float为 left 时的布局方式. 3. ...
- CSS Position 定位属性
本篇文章主要介绍元素的Position属性,此属性可以设置元素在页面的定位方式. 目录 1. 介绍 position:介绍position的值以及辅助属性. 2. position 定位方式:介绍po ...
- npm package.json属性详解
概述 本文档是自己看官方文档的理解+翻译,内容是package.json配置里边的属性含义.package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象.其中很多属性可以通过np ...
- JavaScript特性(attribute)、属性(property)和样式(style)
最近在研读一本巨著<JavaScript忍者秘籍>,里面有一篇文章提到了这3个概念. 书中的源码可以在此下载.我将源码放到了线上,如果不想下载,可以直接访问在线网址,修改页面名就能访问到相 ...
- 【用户交互】APP没有退出前台但改变系统属性如何实时更新UI?监听系统广播,让用户交互更舒心~
前日,一小伙伴问我一个问题,说它解决了半天都没解决这个问题,截图如下: 大概楼主理解如下: 如果在应用中有一个判断wifi的开关和一个当前音量大小的seekbar以及一个获取当前电量多少的按钮,想知道 ...
- jQuery的属性
The Write Less , Do More ! jQuery的属性 1. attr(name|properties|key,value|fn) : 设置或返回被选元素的属性值 ①获取属性 < ...
随机推荐
- javascript中外部js文件取得自身完整路径得办法
原文:javascript中外部js文件取得自身完整路径得办法 有时候我们需要引入一个外部js文件,这个js文件又需要用到自己的路径或者是所在的目录,别问怎么又这么变态的需求,开发做久了各种奇葩需求也 ...
- Spring MVC集成Tiles使用方法
首先,我们定义一个总体的tiles视图 /tiles/mainTemplate.jsp首先使用:<tiles:getAsString name="title"/>打印t ...
- Android入门第六篇之ListView (一)
本文来自http://blog.csdn.net/hellogv/ ListView是一个经经常使用到的控件,ListView里面的每一个子项Item能够使一个字符串,也能够是一个组合控件.先说说Li ...
- 超声波模块SRF05
//////////////////////////////////////////////////////////////////////////////// // // PIC16F877 ...
- 框架学习之道:PE框架简介
1.PE框架开发新功能所需的部分 2.PE框架工作流程(重要) 首先根据<transcation>中的id号,找到模板(template),然后再根据模板找到责任链(chain),一旦确认 ...
- 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)
写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...
- CodeForces 13E. Holes 分块处理
正解是动态树,太难了,仅仅好分块处理水之.看了看status大概慢了一倍之多.. 分块算法大体就是在找一个折衷点,使得查询和改动的时间复杂度都不算太高,均为o(sqrt(n)),所以总的时间复 ...
- 开启程序的Visual Styles
首先看看MS对Visual Styles的解释: Windows XP and later operating systems support a feature called visual styl ...
- OCA读书笔记(10) - 管理UNDO数据
Undo自动管理与手动管理 undo段自动管理SQL> show parameter undo_management 将undo段改为手工管理SQL> alter system set u ...
- dsp下基于双循环缓冲队列的视频采集和显示记录
对最近在设计的视频采集和显示缓冲机制做一个记录,以便以后使用. 视频采集和显示缓冲机制,其实是参考了Linux下v4L2的驱动机制,其采用输入多缓冲frame,输出多缓冲的切换机制.简单的就是ping ...