C# 字段、属性、成员变量
引言:
C#与java,C++中的这些基本概念略有不同。 由于easy混淆,所以这里总结下差别。 希望能对刚開始学习的人有帮助!
一.定义与作用
1.字段(field):是C#类级别定义的,和方法同一级别。
- 一般用来类内部进行訪问。充当一种类中的"全局变量"角色;
- 或者配合属性来使用
2.属性:相同是C#类级别定义的。通常是供外部类訪问的。
3.成员变量:"全局变量",在类中定义的变量,差别于在方法中定义的局部变量。它与字段属性不是同一级别概念,字段,属性都能够叫做成员变量。
二.使用
class Basic
{
private string FieldVar;//这是字段。在当前类中调用
private string fieldVarForProperty;//这是字段。配合属性用
public string FieldVarForProperty//这是属性
{
get{return fieldVarForProperty;}//属性中使用了字段
set{ fieldVarForProperty=value;}
}
}
这里可以看出:字段就是变量。而属性则类似于方法。属性可以使得外部类訪问当前类的字段。这里存在一些问题:
1.有人说,那我们能够将字段定义为public,那外部不就能够訪问了。
确实能够訪问。可是违背了类的设计原则。面向对象要求对数据进行封装。假设这里我们将字段定义为public,来使外部訪问。那么外部就会任意的破坏我们的字段。所以不这么做
2.有人说,属性为什么要配合字段使用呢
直接定义成以下这样不就能够了
public string FieldProperty
{
get {return FieldProperty;}
set{FieldProperty=value;}
}
编译确实没有问题。可以通过。可是思考一下,当我们调用get/set方法时,在方法体内又使用了FieldProperty属性,是个死循环,程序会down掉的
注:C#是有自己主动实现的属性的,就是说
public string FieldProperty
{
get;set;
}
C#会自己主动为你声明一个私有字段的
三.字段与属性差别
1. 字段总是可读可写(readonlykeyword除外)属性可读可写(至少要有一样)
2.字段总是马上运行。效率高。属性还须要调用方法,效率低
3.字段能作为ref,out參数。属性不能够
C# 字段、属性、成员变量的更多相关文章
- 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型
我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...
- Category / Extention / 属性 / 成员变量 /
转载自:http://blog.csdn.net/itianyi/article/details/8618128 在ios第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个 ...
- OC中成员属性 成员变量
比如用property声明一个变量属性 然后我们会为它用懒加载的方式重写get方法 然后我们在使用这个变量的时候,都是用self.itemArray,为什么这样用比较好呢,这是因为self.是对属性的 ...
- ATL向控件添加私有属性-成员变量
https://msdn.microsoft.com/zh-cn/library/cc451389(v=vs.71).aspx ------------------------------------ ...
- java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念
类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...
- 对Objective-C相关的类、方法、属性、成员变量介绍
类的定义@interface FirstClass :NSObject@end//@interface表示声明的是一个类,“:”表示继承关系,@end类的结束类的实现@implementation F ...
- C#属性和变量的区别学习
参考一 昨天看三层架构 (具体没怎么弄懂) 发现一般有一页代码专门用户存放字段的 而且都用用属性封装..令我诧异的是 很多字段属性都存在 get{}和set{} 和普通的变量没什么区别(可读可写) ...
- Java中字段、属性、成员变量、局部变量、实例变量、静态变量、类变量、常量
首先看个例子: package zm.demo; public class Demo { private int Id;//成员变量(字段).实例变量(表示该Id变量既属于成员变量又属于实例变量) p ...
- runtime第二部分成员变量和属性
接上一篇 http://www.cnblogs.com/ddavidXu/p/5912306.html 转载来源http://www.jianshu.com/p/6b905584f536 http:/ ...
随机推荐
- IIS7 配置 PHP5.5
本文环境: 操作系统:Win7(x64) 中文专业版 PHP :V5.5 首先添加IIS. 控制面板-〉程序-〉打开或关闭Windows功能 1. 勾选“Internet 信息服务” ...
- Maven--403权限问题解决方式(求解决)
我的程序配置方案例如以下(大牛们相信你们不仅仅是一个传说): 目的:实现maven公布项目到tomcat以下.用eclipse一步到位调试. pom.xml配置: <plugin> < ...
- java 解析 json 遍历未知key
1.—————————————————————————————————————————————————————————————— import net.sf.json.JSONObject; Stri ...
- JS 在 HTML 无缝滚动
marquee图片无缝滚动先了解一下对象的几个的属性:innerHTML: 设置或获取位于对象起始和结束标签内的 HTMLscrollHeight: 获取对象的滚动高度.scrollLeft: 设置或 ...
- HUNNU11352:Digit Solitaire
Problem description Despite the glorious fall colors in the midwest, there is a great deal of time t ...
- CSS3 3D旋转动画代码实例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- WPF换肤之一:创建圆角窗体
原文:WPF换肤之一:创建圆角窗体 我们都期望自己的软件能够有一套看上去很吸引人眼球的外衣,使得别人看上去既专业又有美感.这个系列就带领着大家一步一步的讲解如何设计出一套自己的WPF的窗体皮肤,如果文 ...
- VS解决BEX错误但不能关闭DEP保存
报道近期计划BEX错误: 问题签名: 问题事件名称: BEX 应用程序名: Auth.exe 应用程序版本号: 0.0.0.0 应用程序时间戳: 546d9e0c 故障模块名称: Auth.exe 故 ...
- 使用ToggleButton和StackPanel+Border实现圆角开关按钮动画效果
<ToggleButton Height=" HorizontalAlignment="Left" Margin="138,122,0,0" N ...
- HashMap两种类型
Map<String, Integer> map = new HashMap<String, Integer>(); map.put("d", 2); ma ...