C#中的get和set有什么用 声明属性

本文详细介绍了C#中的get和set方法的作用及其应用场景,包括如何使用它们来封装类的属性,提供读取和写入功能,并实现对字段的安全访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我知道get set的作用
这是属性,get具有读取功能,set是写入功能,你可以看C#里的属性。
1.作用就是对字段进行封装,类似javabean的用途。没有也可以,但是破坏了OO的封装性。
2.如果只有get和set其中之一的方法的话就实现了对字段的保护。只读或者只写。
get/set为获取或者设置类中的属性
比如:
private int _count;  定义私有变量
public int Count     设置类中的变量(数据字段)属性
{
set
{
//value是属性中的关键字
//代表你传入的值
this._count=value;
}
get
{
return this._count;
}
}
可以在属性中做验证或者通过属性对某个属性进行保护..........
这里在属性声明中要用到的:
如:
class ClassA
{
   private int _a;
   public A(int a)
   {
      this._a = a;
   }
   public int A
   { 
       get { return this._a; }
       set { this._a = value; }
   }
}

在类ClassA里面有一个私有的变量_a,我们通过声明属性A,用GET来返回_a的值,用隐藏参数value来为_a赋值,这样就可以实现外部成员对其值的获取(int val = ClassA.A;)和赋值(ClassA.A = 1;)操作了.
当get和set同时存在时表示这个属性是可写可读的,当然也可以只存在get也就是说只能访问而不能更改其值,如果只存在set那么就刚好相反只能对其进行赋值操作了.
同果我们也可以通过属性来增加一层逻辑,比如说我们有优秀学员的类,其分数必需大于60分,那么我们可以在set下面加一层限制
   public int A
   { 
       get { return this._a; }
       set { 
              if(value >= 60)
              this._a = value; 
           }
   }
但是有的程序里 private string strName; public string StrName { get { return strName; } set { strName = value; } }这个get set段里,也没有判断 过滤什么的!get只是取出strName的值set只是设置strName的值这和public string strName;有什么区别?还是为了以后修改做准备?


.............................

这是C#中的属性 

public string UserName 
{ 
get { return this._username; } 
set { this._username = value; } 
} 

通俗来讲..get是获取值 set是设置值

比如这句:get { return this._username; } 
如果调用这个get方法 就能获得方法return的 this._username(返回的值)
调用方法:Console.Write(对象.UserName);(输出该属性的值)

比如这句:set { this._username = value; } 
如果调用这个set方法 就可以重新设置username的值 value就是你新设置的值
调用方法:对象.UserName="新值";(为该属性附新值) 

个人理解:
1.在封装数据库字段的时候非常有用,相信大家都这么用。
2.你可以吧UserName当成一个这个类的一个属性,这个属性由字段_username的值确定,也可能不是_username,而是经过_username变化的。你可以在GET、SET中作相应的处理。比如这样:

public string UserName 
{ 
get { 
if(string.IsNullOrEmpty(_username))
return ERRORCODE;
return this._username;
 } 
set { 
if(string.IsNullOrEmpty(_username))
this._username = defaultusername;
this._username = value; 
} 
} 

所以,封装以后,比没有封装更加方便。如果你要做条件判断、转换等 操作,在GET、SET你做会更方便。而且还保护了原字段。
假设_username是数据库字段,如果程序员不想公开这个属性,而是做一些变换,这样数据安全性更高。

............

 

<think>好的,用户想了解C#getset的作用。首先,我需要回顾一下C#属性的基本概念。根据引用[1],getset属性的访问器,用于控制对属性的读取写入。这让我想到,属性C#中是一种封装字段的方式,提供更灵活的数据访问控制。 接下来,用户可能想知道为什么需要使用getset,而不仅仅是用公共字段。引用[3][4]提到,可以在访问器中添加逻辑,比如验证输入值是否符合要求。例如,在set方法中检查value是否合法,如果不符合可以设置默认值或抛出异常。这有助于保证数据的有效性,避免无效数据被赋给字段。 然后,用户可能关心getset的具体语法。引用[4]中的例子展示了属性的不同写法,包括自动属性带有逻辑的手动实现。自动属性简化了代码,而手动实现允许更多的控制。需要解释这两种方式的区别应用场景。 此外,用户可能对只读或只写属性有疑问。引用[4]指出,如果省略set访问器,属性就是只读的,只能在类内部赋值。这在设计不可变对象时很有用。同样,如果省略get属性就是只写的,但这种情况较少见。 可能用户还会想知道getset与公共字段的区别。公共字段无法在赋值或取值时添加逻辑,而属性允许在访问数据时执行额外操作,比如触发事件或记录日志。这也是面向对象编程中封装性的体现。 最后,需要总结getset的主要功能:封装字段、控制访问权限、添加验证逻辑、支持数据绑定等。这些内容可以分点说明,结合引用中的例子,让用户更清晰地理解。</think>### C#getset方法的功能与用途 在C#中,`get``set`是属性的核心组成部分,用于控制对类中私有字段的**安全访问****数据验证**。以下是它们的具体功能与用途: --- #### 1. **基本功能:封装字段** 属性通过`get``set`访问器封装私有字段,隐藏实现细节,提供统一的访问接口。 例如: ```csharp private string _name; public string Name { get { return _name; } set { _name = value; } } ``` - **`get`**:返回私有字段的值(如`return _name`)[^1]。 - **`set`**:通过`value`关键字接收外部传入的值并赋值给私有字段(如`_name = value`)[^4]。 --- #### 2. **控制访问权限** - **只读属性**:省略`set`访问器,外部只能读取无法修改。 ```csharp public string Name { get; } // 只能在构造函数或类内部赋值 ``` - **只写属性**:省略`get`访问器(较少使用)。 - **混合权限**:可为`get`或`set`单独设置访问级别: ```csharp public string Name { get; private set; } // 外部只读,类内可写 ``` --- #### 3. **数据验证与逻辑扩展** 在`set`中可添加条件判断,确保数据有效性: ```csharp private int _age; public int Age { get => _age; set { if (value < 0) _age = 0; // 年龄不可为负数 else _age = value; } } ``` 类似地,`get`中可返回计算后的值(如格式化字符串)[^3]。 --- #### 4. **支持数据绑定与自动化** 属性是数据绑定的基础(如WPF、ASP.NET MVC)。例如: ```csharp public string UserName { get; set; } = "admin"; // 自动属性,编译器生成隐藏字段 ``` 自动属性简化代码,同时保留扩展性(未来可改为完整属性)。 --- #### 5. **与传统方法的对比** - **优于公共字段**:公共字段无法添加逻辑,例如: ```csharp public string Name; // 直接暴露,无控制 ``` - **替代Get/Set方法**:属性语法更简洁,例如: ```csharp // 传统方法 public string GetName() => _name; public void SetName(string value) => _name = value; // 属性方式 public string Name { get; set; } ``` --- ### 应用场景示例 1. **数据模型类**:确保字段合法性(如价格非负)。 2. **UI数据绑定**:属性变化可触发界面更新。 3. **API接口**:隐藏敏感字段,返回处理后数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值