C# get set函数很常用,但是用好还是需要很多经验的,下面的文章就是帮你积累C# get set函数经验的。

  C# get set不提倡将域的保护级别设为 public而使用户在类外任意操作--那样太不OO,或者具体点说太不安全!对所有有必要在类外可见的域,C#推荐采用属性来表达。属性不表示存储位置,这是属性和域的根本性的区别。下面是一个典型的属性设计:

using System;
class MyClass
{  int integer;  public int Integer   {  get {return integer;}  set {integer=value;}  }
}
class Test
{  public static void Main()  {  MyClass MyObject=new MyClass();Console.Write(MyObject.Integer);MyObject.Integer++;Console.Write(MyObject.Integer);}
} 

一如我们期待的那样,程序输出0 1。我们可以看到属性通过对方法的包装向程序员提供了一个友好的域成员的存取界面。这里的value是C# get set的关键字,是我们进行属性操作时的set的隐含参数,也就是我们在执行属性写操作时的右值。

  属性提供了只读(get),只写(set),读写(get和 set)三种接口操作。对域的这三种操作,我们必须在同一个属性名下声明,而不可以将它们分离,看下面的实现:

class MyClass
{  private string name;  public string Name{  get { return name;}  }  public string Name  {  set { name = value; } }
}  

上面这种分离Name属性实现的方法是错误的!我们应该像前面的例子一样将他们放在一起。值得注意的是三种属性(只读,只写,读写)被C# get set认为是同一个属性名,看下面的例子:

class MyClass
{  protected int num=0;  public int Num  {  set {  num=value;  }  }
}  class MyClassDerived: MyClass
{  new public int Num  {  get {  return num;}}
}class Test
{public static void Main()  {MyClassDerived MyObject = new MyClassDerived();//MyObject.Num= 1; //错误 !  ((MyClass)MyObject).Num = 1;}
}  

由于属性的方法的本质,属性当然也有方法的种种修饰。属性也有5种存取修饰符,但属性的存取修饰往往为public,否则我们也就失去了属性作为类的公共接口的意义。除了方法的多参数带来的方法重载等特性属性不具备外, virtual, sealed, override, abstract等修饰符对属性与方法同样的行为,但由于属性在本质上被实现为两个方法,它的某些行为需要我们注意。看下面的例子:

abstract class A
{  int y;  public virtual int X  {  get { return 0; }  }  public virtual int Y  {get { return y; }set { y = value; }}  public abstract int Z { get; set; }
}
class B: A
{  int z;  public override int X  {  get { return base.X + 1; }}  public override int Y{set { base.Y = value < 0? 0: value; }  }  public override int Z  {  get { return z; }  set{z = value; }  }
}

这个例子集中地展示了属性在继承上下文中的某些典型行为。这里,类A由于抽象属性Z的存在而必须声明为abstract。子类B中通过base关键字来引用父类A的属性。类B中可以只通过Y-set便覆盖了类A中的虚属性。

  静态属性和静态方法一样只能存取类的静态域变量。我们也可以像做外部方法那样,声明外部属性。以上就是对C# get set的简单介绍。

经典讲解C# get set相关推荐

  1. 大一微积分笔记整理_微积分大一基础知识经典讲解

    <微积分大一基础知识经典讲解>由会员分享,可在线阅读,更多相关<微积分大一基础知识经典讲解(7页珍藏版)>请在人人文库网上搜索. 1.Chapter1 Functions(函数 ...

  2. 计算机语言中流程图,编程中的流程图入门教学【经典讲解】.ppt

    编程中的流程图入门教学[经典讲解]解读 算法的描述 自然语言 流程图 伪代码 程序设计语言 -- 程序框图 程序框图(流程图)是一种用程序框.流程线及文字说明来表示算法的图. 构成流程图的图形符号及其 ...

  3. python程序应用经典实例-Python实例应用经典讲解

    Python作为一种功能强大的脚本语言,给开发人员带来了非常大的好处.那么它的具体应用方式又是怎样的呢?我们今天就可以通过一个经典的Python实例应用来详细分析一下这一语言的具体应用方式. Pyth ...

  4. parentNode,parentElement,childNodes,children最经典讲解

    首先了解parentNode,parentElement,childNodes,children四大属性之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点组成的,节点 ...

  5. 【转】parentNode,parentElement,childNodes,children最经典讲解

    点进去原文 首先了解parentNode,parentElement,childNodes,children四大属性之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点 ...

  6. 卡尔曼滤波经典讲解,C++算法实现

    请移步跳转文章排版更加清晰 在学习卡尔曼滤波器之前,首先看看为什么叫"卡尔曼".跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是 ...

  7. iOS经典讲解之获取沙盒文件路径写入和读取简单对象

    #import "RootViewController.h" @interface RootViewController () @end 实现文件: @implementation ...

  8. 流水线经典讲解!!!!!

    如果某个组合逻辑电路中没有反馈或者迭代运算,那么我们就可以考虑流水线设计方法. 把组合逻辑分成延迟时间基本相等的小块,只要小块的组合逻辑的延迟小于时钟周期,整个组合逻辑的输入值每个时钟就可以变化一次, ...

  9. PHP单例模式经典讲解

    首先我们要知道明确单例模式这个概念,那么什么是单例模式呢? 单例模式顾名思义,就是只有一个实例. 作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例, 这个 ...

  10. dry的原理_Dry Etch 工艺基本原理及良率剖析(经典讲解)

    Dry Etch 工序的目的 广义而言,所谓的刻蚀技术,是将显影后所产生的光阻图案真实地转印到光阻下的 材质上,形成由光刻技术定义的图形. 它包含了将材质整面均匀移除及图案选择性部分去除, 可分为湿式 ...

最新文章

  1. C++知识点38——拷贝赋值运算符、析构函数、=default、阻止拷贝和赋值
  2. 联通电子渠道的差异化思维
  3. 《C语言课程设计》一3.1 文件复制
  4. 操作系统-银行家算法
  5. hdu 5501(贪心+01背包)
  6. 【Unity3D基础】让物体动起来②--UGUI鼠标点击逐帧移动
  7. 算法设计与分析——递归与分治策略——线性时间选择
  8. Spring MVC初见面
  9. JavaScript执行环境
  10. 数据结构 【实验 串的基本操作】
  11. SatSun CRMS V2010 整站系统
  12. Mstar的Monitor方案OSD 菜单制作(三)——添加字符串文字
  13. 【学习笔记】多目标优化问题分解成若干简单多目标子问题--MOEA/D-M2M
  14. 单云台语音跟踪摄像机MHD-G200TH
  15. CSS overflow的几种属性值
  16. hadoop 中各种概念解释记忆
  17. Linux命令之关机命令
  18. 三星手机电池循环清零代码_2018年自然语言处理最值得关注的研究、论文和代码...
  19. 高速成长的背后,华为云乌兰察布数据中心的绿色之道
  20. 【连载】《linux入门很简单》电子版——作者:刘金鹏(第一章初来乍到——抵达)...

热门文章

  1. 微软高管:人工智能是世界上最重要技术
  2. 飞卡日常进度之电机驱动
  3. mybatis嵌套循环map(高级用法)
  4. 泰芯TX8C1260TS20 TSSOP20封装(兼容STM8S003F3、新唐N76E003AT20)通用8位MCU单片机
  5. Python-入门-介绍(一)
  6. 数据质量在数据资产评估中有着怎样的作用?
  7. Rust的Async-await能与Golang的goroutines一较高下吗?
  8. 算法-经点问题(鸡兔同笼,麦克劳林求pi,开灯问题)
  9. 【IF=10.812 Molecular Plant】HDA9和WRKY53共同在植物胁迫中起拮抗调节作用
  10. Thumbs.db文件取消自动生成及删除方法