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:/ ...
随机推荐
- hdu3899(树形dp)
题意:给一树,每个结点有人数,边有权值,表示经过这条边所需时间, 问取某个结点作为开会地点,所有人全部到达此结点最少所需总时间? 分析:val[u]表示以u为根节点的总人数,num[u]表示以u为根节 ...
- AJAX基础知识点学�
1.AJAX(Asynchronous JavaScript and XML)即,异步JavaScript和XML 2.同步/异步差别 同步: ①每次进行整个页面的刷新 ②同步的链接在同一时间仅仅能有 ...
- error C2471: 无法更新程序数据库
这段时间在使用VS做一个项目.在使用过程中,今天遇到了一个问题,也就是题目所说的那样: error C2471: 无法更新程序数据库.之后在网上搜了一下,得到了两种解决方案,两种方案分别如下: (一) ...
- Android横屏竖屏设置
Android横竖屏设置: 方法一:onCreate()中 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // ...
- 初识Mongodb之[CURD]-PHP版
行动 在了实践之前,希望大家看一下上面的学习资源,了解一下基本操作. 数据连接初始账号password 账号:admin password:admin 首先我们建立一个文件:mongodb.php,设 ...
- WPF换肤之八:创建3D浏览效果
原文:WPF换肤之八:创建3D浏览效果 上节中,我们展示了WPF中的异步以及界面线程交互的方式,使得应用程序的显示更加的流畅.这节我们主要讲解如何设计一个具有3D浏览效果的天气信息浏览器. 效果显示 ...
- win7提示“ipconfig不是内部或外部命令”
进入windows环境变量设置->系统变量,找到path,添加C:\Windows\SysWOW64,或者c:\windows\system32
- log4net和一般的记录日志方法
下载 http://files.cnblogs.com/crazyair/log4net.zip 1 在web项目中新建一个 Log4Net.config <?xml version=" ...
- [IOS]本地化
我们在IOS开发应用中,会碰到做好的一个应用,如何趋向国际化,也就是说支持多种语言?下面我就来简单演示一下,用一个Demo来实现中文和英文的实现. 实现步骤: 1.本地化项目中xib的view 1.在 ...
- 集成框架 javaweb开发平台ssmy_m(生成代码) java struts2 mybatis spring maven jquery
网页地址 http://blog.csdn.net/lpy3654321/article/details/31841573 项目设想,在项目开发中,我们的开发者大多数时间都在反复开发 相同的keywo ...