引言:

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. [置顶] hdu 4699 2个栈维护 or 伸展树

    hdu 4699  Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 注意这里的k是在光标之前的, ...

  2. 从SAE又回到BAE,感觉好轻松

    [前言] 我这个人总喜欢对同一类东西比較过来比較过去,用过来用过去. 比如曾经选择浏览器,从開始ie,到遨游,世界之窗.qq等等,用了有10款左右的浏览器,每款都用了不短时间, 终于固定在火狐+chr ...

  3. Android学习十九:ContentProvider初步

    一.Content Provider基本概念 1.ContentProvider为存储和获取数据提供了统一的接口.ContentProvide对数据进行封装.不用关心数据存储的细节.使用表的形式来组织 ...

  4. iScreenLocker 3.1.8 安卓锁屏通知--苹果一样的体验

    *软件介绍: 苹果锁屏通知(iScreenLocker)是一款android上ios风格的锁屏软件.它颠覆安智通知设计,将原来状态栏的通知搬到锁屏界面上来,能够在桌面轻松收发短信,微博,微信等消息.它 ...

  5. 21天教你学会C++

  6. javascript一元操作符(递增,递减)

    <script type="text/javascript"> var a="1"; var b=false; var c="dd&quo ...

  7. Deploy 11.2.0.3 RAC+DG on Windows 2008 R2 Step by Step

    环境规划: 节点1: tc1 192.168.56.101 内存:2G 节点2: tc2 192.168.56.102 内存:2G 物理备库:tcdg192.168.56.108内存:1.5G 操作系 ...

  8. muduo网络图书馆评测

    上个月看到朋友推荐mudo网络图书馆,该代码是在国内同行中,开源工程后.甚至钦佩.根据mudo手动和035代码的版本看起来正在建设中.感觉是一个比较成熟且易于使用的网络库.我的手也有自己的网络库,虽然 ...

  9. 面向对象的方式进行数据交换网络之间的差异--无缝切换的发展到单机游戏C/S模式

    上一页本文描述描述有关数据的发展过程之间的差异支撑点,这里展示的另一个特点:无缝切换的发展,以独立C/S模式 一般C/S模式都面临一个问题: 就是开发过程中的调试难题,由于涉及到client和服务端相 ...

  10. poj2752 Seek the Name, Seek the Fame(next数组的运用)

    题目链接:id=2752" style="color:rgb(202,0,0); text-decoration:none; font-family:Arial; font-siz ...