c#中GET和SET的具体用法

本文解释了在.NET框架中使用属性而非直接操作私有变量的原因。通过属性的get和set方法不仅可以保护私有变量的安全性,还能在修改变量时执行额外的操作。
代码如下:
public class Car
{private string color;
 public string Color
 {
   get
   {return color;
    }
   set
    {color=value;
    }
  }
}
我的理解是:通过GET和SET对公有变量Color进行读写操作,实际就是间接更改color私有变量的值,那既然如此。为何不设color为public,让实例进接对color进行读写操作呢?

 

如果有一天,老板让你把这个类改成

当汽车的颜色改变时,同时计算一下汽车的《价格》属性

那么如果直接对Color操作,你不是死定了?

 
 
“属性”是.net的特色之一。
其实就相当于方法,尤其是java中经常会用到get、set方法(.net的有些思想就是java的)。
 
 

属性的真实作用不只是为了更改某个成员变量的值

比如form的size属性在set的同时要重画form,如果你不想让用户对color修改,就不要提供set方法

 

 

是面向对象具有的
set and get
它的用途:  一般是对类里面的变量进行操作. 而不是直接对类的变量进行操作.
有一个很大的作用就是:  便于维护.

因为:
如果一个类的一个变量int a ,在其它包或命名空间类中使用了1000次,但是过了许久,你想把a改为b,
如果直接对变量a操作的话,就得需求修改整个程序的1000处.  如果用属性了,就不会了,只需改这个方法即可
public int A
{
 set
 {
   a = value;
 }
 get
 {
   return a;
 }
}
放为:
public int B
{
 set
 {
   b = value;
 }
 get
 {
   return b;
 }
}
除去这个属性之外的地方根本不需要改变

 
 

通过上面的讲解。有一点点明白了。
是不是让满足一定条件让GET和SET来改变类中的私有变量。而不能让实例直接操作。像上面的代码保证了color属性的安性性。
既然如此可不可以写成
set
{color=value*20;  //value是不是相当于Color的值
}

 

我当初和你有一样的想法.但是现在改变了。
举个例子说明一下吧.
public class Car
{

 public string Color
 {
   get
   {
      if(this.viewstate["color"]!= null)
       {
       return this.viewstate["color"];
       }
       return "":
    }
   set
    {
      this.viewstate["color"];=value;
    }
  }
}

在asp.net中通常这么使用.如果用变量的话就不好使用了。而且get,set中可以写多个语句.如上的get.
 

<think>嗯,用户想了解C#getset用法,需要提供使用方法、示例语法。首先,我应该从基础开始,解释属性的概念,然后区分自动属性传统属性。记得要符合系统级指令里的格式要求,比如数学公式用$...$,代码块用正确格式,还有引用标注。 用户提供的引用中有三个来源,引用[2][3]提到自动属性索引器的例子,需要合理引用这些内容。可能用户需要知道如何定义属性,getset的访问器,以及它们的访问控制。比如,自动属性{ get; set; }这种写法,还有如何设置只读或只写属性。 另外,用户可能对索引器感兴趣,引用[3]中的例子展示了索引器的使用,应该包含这部分内容。需要解释索引器如何像数组一样访问对象元素,并且支持多参数。 还要注意生成相关问题,比如属性与字段的区别、自动属性的原理、索引器的多参数使用等。确保回答结构清晰,分点说明,每个部分都有示例代码,并正确标注引用来源。同时,避免使用Markdown格式,保持自然的中文口语化。</think>### C#getset用法详解 #### 一、基础语法 在C#中,属性(Properties)通过`get``set`访问器实现字段的封装,其标准语法为: ```csharp public 数据类型 属性名 { get { return 字段; } // 读取属性值 set { 字段 = value; } // 设置属性值(value为隐式参数) ``` 示例: ```csharp private string _name; public string Name { get { return _name; } set { _name = value; } } ``` #### 二、自动属性(简化写法) C# 3.0引入自动属性,编译器自动生成隐藏字段[^2]: ```csharp public int Age { get; set; } // 可读写 public string Id { get; } // 只读属性(需构造函数赋值) ``` #### 三、访问控制 可对访问器单独设置权限: ```csharp public string Password { get; private set; } // 外部只读,类内可写 public double Balance { private get; set; } // 外部只写,类内可读 ``` #### 四、索引器(特殊属性) 通过索引器可实现类似数组的访问方式[^3]: ```csharp public class MyCollection { private int[] _data = new int[10]; public int this[int index] { get => _data[index]; set => _data[index] = value; } // 多参数索引器 public string this[int x, int y] { get { /* 矩阵访问逻辑 */ } } } ``` #### 五、验证逻辑示例 在set访问器中添加业务规则: ```csharp private int _score; public int Score { get => _score; set { if (value < 0) _score = 0; else if (value > 100) _score = 100; else _score = value; } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值