引言:

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# 字段、属性、成员变量的更多相关文章

  1. 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

    我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...

  2. Category / Extention / 属性 / 成员变量 /

    转载自:http://blog.csdn.net/itianyi/article/details/8618128 在ios第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个 ...

  3. OC中成员属性 成员变量

    比如用property声明一个变量属性 然后我们会为它用懒加载的方式重写get方法 然后我们在使用这个变量的时候,都是用self.itemArray,为什么这样用比较好呢,这是因为self.是对属性的 ...

  4. ATL向控件添加私有属性-成员变量

    https://msdn.microsoft.com/zh-cn/library/cc451389(v=vs.71).aspx ------------------------------------ ...

  5. java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念

    类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...

  6. 对Objective-C相关的类、方法、属性、成员变量介绍

    类的定义@interface FirstClass :NSObject@end//@interface表示声明的是一个类,“:”表示继承关系,@end类的结束类的实现@implementation F ...

  7. C#属性和变量的区别学习

    参考一   昨天看三层架构 (具体没怎么弄懂) 发现一般有一页代码专门用户存放字段的 而且都用用属性封装..令我诧异的是 很多字段属性都存在 get{}和set{} 和普通的变量没什么区别(可读可写) ...

  8. Java中字段、属性、成员变量、局部变量、实例变量、静态变量、类变量、常量

    首先看个例子: package zm.demo; public class Demo { private int Id;//成员变量(字段).实例变量(表示该Id变量既属于成员变量又属于实例变量) p ...

  9. runtime第二部分成员变量和属性

    接上一篇 http://www.cnblogs.com/ddavidXu/p/5912306.html 转载来源http://www.jianshu.com/p/6b905584f536 http:/ ...

随机推荐

  1. Windows Server时间服务器配置方法

    1 时间服务器经常会碰到客户端机器需要和服务器在时间上保持同步,否则会出现各种问题,特别是有时间相关的触发功能的时候. 为解决各设备间时间统一的问题,我们可在网络中设置一台服务器使其作为基准时间,其它 ...

  2. Android它SDK Manager无法更新终极解决方案

    前些日子.Google终于发布Android5.0正式版--棒糖.也许你和我一样,,此外,我想在第一时间更新SDK,结果打开SDK Manager,但令人失望,络围墙啊.默默问一句:近期好久没有听到方 ...

  3. Qt--将Qt 动态链接生成的exe及依赖dll打包方法

    Qt静态编译链接生成的exe文件,不需依赖dll,可以独立运行,发布很方便. 但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制. 方法之一,就是用动态编译,然后把exe和需要的dll整合成一 ...

  4. Linux 命令 快捷命令综合

    FTP开机启动 启动要让FTP每次开机自动启动,运行命令:  chkconfig --level 35 vsftpd on linux 关机 1.halt linux 注销 1.logout linu ...

  5. 分布式MySQL数据库TDSQL架构分析

    摘要:腾讯计费平台部为了解决基于内存的NoSQL解决方式HOLD平台在应对多种业务接入时的不足.结合团队在MySQL领域多年应用和优化经验,终于在MySQL存储引擎基础上,打造一套分布式SQL系统TD ...

  6. HDU 1394 Minimum Inversion Number (数据结构-段树)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  7. VS2010不能编译SQLServer2005的Microsoft.SQLServer.ManagedDTS.dll的解决方法

    VS2010不能编译SQLServer2005的Microsoft.SQLServer.ManagedDTS.dll是最近碰到的一个疑难杂症问题,通过查询微软社区和一些英文资料找到了解决方法,同事说之 ...

  8. Android源码及SDK国内镜像下载

    Android源码及SDK国内镜像下载Android源码下载: 今天发现,清华大学提供AOSP镜像,以前都是从Google的站点下载同步更新的,但是现在有了国内的镜像站点就好多了,下载Androidd ...

  9. elasticsearch中国字(mmseg)——手动添加字典

    elasticsearch中国文字本身并不是一个理想的插件效果.手动添加字典可以补偿在一定程度上. 后发现了几个实验,mmseg分段机制采用正向最长匹配算法.例如,抵抗"小时报"这 ...

  10. 【 D3.js 入门系列 --- 4 】 怎样使用scale(比例)

    本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 在上一节中使用了一个非常重要的概念 - scale (这个不知道 ...