千家信息网

C#中get、set函数怎么用

发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,这篇文章将为大家详细讲解有关C#中get、set函数怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C# get set不提倡将域的保护级别设为 public而
千家信息网最后更新 2025年11月18日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;  }  }

我们可以看到MyClassDerived中的属性Num-get{}屏蔽了MyClass中属性Num-set{}的定义。

当然属性远远不止仅仅限于域的接口操作,属性的本质还是方法,我们可以根据程序逻辑在属性的提取或赋值时进行某些检查,警告等额外操作,看下面的例子:

class MyClass  {  private string name;  public string Name  {  get { return name; }  set {  if (value==null)  name="Microsoft";  else name=value;  }  }  }

由于属性的方法的本质,属性当然也有方法的种种修饰。属性也有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# 例子 面的 存取 接口 本质 程序 篇文章 行为 静态 函数 关键 关键字 典型 参数 更多 错误 不错 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 qq群改群名服务器繁忙 杭州云森客网络技术有限公司 数据库编写用什么技术 网络安全主题绘画作品大学 2021网络安全重保 范式思想在数据库哪些方面体现 网络安全法制定历程 微信公众号软件开发价格 网游热血江湖服务器架设 安慰邦德网络技术有限公司 移动网络安全宣传周答案 腾讯天天象棋服务器连接不上 登录学信网怎么用万方数据库查重 服务器电源导致cpu频率不稳 哈尔滨市服务器包装公司报价 数据库服务器有病毒怎么办 单位的网络安全有哪些方面 咪咕动漫软件开发支撑方 中盛互联网科技有限公司 戴尔r940服务器哪家便宜 上海誉畅网络技术发展有限公司 软件开发培训班好就业吗 天空卫视网络安全技术电话 网络安全技能竞赛规则 软件开发中为什么要写文档 编写一个系统用什么数据库 国家电网上海市网络安全工程 南京兼职网络技术 延庆区咨询软件开发价格信息 忍3服务器多久更新完
0