我们在学习C#语法的属性时,都要首先和GET,SET访问器打交道,从英文的字面意思上理解,GET应该就是获得什么什么,而SET应该是设置什么什么,那我们看一下,官方是怎么定义这对访问器的:get是读取属性时进行的操作,set是设置属性时进行的操作。定义一个属性如果只有get,这个属性就是只读的。同样,只有set,属性就是只写的,当然只写的属性我觉的意义不是很大。
接下来我们通过一些代码实例来接触一下GET和SET访问器
class Bank
{
private int money;//私有字段
public int Money //属性
{
//GET访问器,可以理解成另类的方法,返回已经被赋了值的私有变量money
get { return money; }
//SET访问器,将我们打入的值赋给私有变量money
set { money = value; }
}
}
我们可以打个生动的比方:
Money属性就像银行里的自动存取款机,你看不见里面的money,但你能用set(存钱),用get(取钱)。money是一个私有字段,是分装在类中的,类以外的程序不能直接访问的,类的set和get成员是外部程序访问类内部属性的唯一方法,就像你去银行取钱,你不能直接从银行的保险柜里拿到钱,而是银行营业人员把钱取出来给你的。
那我们设置了Money属性,怎么使用呢??
class Program
{
static void Main(string[] args)
{
//实例化一个Bank银行
Bank bank = new Bank();
//对Money属性做赋值操作,这时我们访问的是SET访问器
bank.Money = 15;
//对Money属性做取值操作,这时我们访问的是GET访问器
int a = bank.Money;
}
}
细心的朋友可以发现当我们设置断点在SET访问的中,执行代码 bank.Money = 15;时,就会进入我们属性中的SET访问器了。
以上就是我们的SET和GET访问器的最基本的应用了。
但是我们为什么要用GET和SET访问器呢??
通过GET和SET对公有变量Money进行读写操作,实际就是间接更改money私有变量的值,那既然如此。为何不设money为public,让实例直接对money进行读写操作呢?我们是不是在多此一举呢?
其实,我当初刚接触GET和SET就很理解,并不是说他们的含义难理解,而是为什么要用?为何不直接用个public的字段变量来代替呢?
理解一:用了GET和SET能让赋值和取值增加限制
class Bank
{
private int money;//私有字段
public int Money //属性
{
//GET访问器,可以理解成另类的方法,返回已经被赋了值的私有变量money
get { return money; }
//SET访问器,将我们打入的值赋给私有变量money,并且加了限制,不能存负的
set
{
if (value >= 0)
{
money = value;
}
else
{
money = 0;
}
}
}
}
这样的话,我们是永远无法给Money属性赋值负的金钱了!
其实这种应用才我们的实际的项目中,属性设置中非常常见!例:
public string ApplyStaff
{
//延迟加载ApplyStaff对象
get
{
if (this.IsGhost)
{
LazyLoaderFactory.GetLoader().LoadApplicationConfirm(this);
}
return applyStaff;
}
set
{
//判断输入的字符的长度
if (value.Length > 40)
{
throw new Exception("领用人不能超过40个字符。");
}
this.applyStaff = value;
}
}
public string BillName
{
get
{
return billName;
}
set
{
if (value==string.Empty)
{
throw new Exception("单据名称不能为空");
}
else if (value.Length > 40)
{
throw new Exception("单据名称长度不能超过40个字符");
}
else
{
this.billName = value;
}
}
}
如果在SET访问器中设置这个属性的一些特性,比如说不能为空,长度大小,必须为数字,各类正则表达式等等,然后抛出异常,表示层再来接受,这样就可以少写很多验证程序了。
理解二:封装性、安全性、完整性
我也没想太明白
分享到:
相关推荐
在C#编程语言中,`get`和`set`是访问器方法,它们用于属性(Property)的定义,提供了一种安全的方式来读取和修改对象的私有成员。属性是类的一个特性,它允许我们像访问字段一样访问数据,但同时提供了额外的控制和...
当我们创建一个类并定义其属性时,通常需要手动编写get和set访问器,这在处理大量属性时显得繁琐。本篇文章将详细讲解如何使用Visual Studio开发工具快速批量生成属性的get和set方法。 首先,我们需要理解属性在...
在C#编程语言中,get和set是属性...总结,get和set访问器是C#中实现数据封装的关键工具,它们提供了对字段的控制,确保了数据的安全性和代码的整洁性。正确理解和使用get和set访问器对于编写高质量的C#代码至关重要。
`value`关键字在set访问器中代表要赋给字段的新值。 属性可以是只读、只写或读写的。只读属性只有get访问器,只写属性只有set访问器,而读写属性同时具有get和set访问器。以下是一个只读属性的示例: ```csharp ...
在C#编程语言中,`get` 和 `set` 是实现属性访问器的核心组成部分,它们不仅增强了代码的安全性,还提高了程序的封装性,是面向对象编程(OOP)的重要实践之一。本文将深入探讨C#中的`get`和`set`机制,以及如何正确...
* 可以在get和set访问器中添加更多的逻辑和验证 6. 属性的应用场景 属性可以应用于各种场景,例如: * 封装和保护数据成员 * 提供一种安全、灵活的方式来访问和修改数据 * 实现数据验证和逻辑检查 * 记录和跟踪...
首先,让我们深入了解一下C#中的get和set访问器: 1. **get访问器**:get访问器用于返回属性的值。在类的私有字段中存储实际数据,然后get方法提供一个无参数的公共接口来获取这个值。例如,对于长方体的长度,可以...
前两天IE9 Beta版发布了,对于从事Web开发的朋友们来说真是个好消息啊,希望将来有一天各个浏览器都能遵循统一的标准。今天要和大家分享的是JavaScript中的Get和Set访问器,和C#中的访问器非常相似。
- 索引器在类中定义为公共成员,并且通常具有get和set访问器,用于读取和修改值。 - 索引器的关键字是`this`,它作为返回类型前的修饰符。 2. 索引器的语法: ```csharp public 数据类型 this[参数列表] { get...
此外,还可以在get和set访问器中添加额外的逻辑,如数据验证。 索引器是C#中另一种增强访问类成员的机制,它允许对象像数组那样通过索引来访问数据。当类需要管理一组相关数据,如客户列表,索引器就非常有用。一个...
C#的属性是封装和保护数据的重要手段,通过合理设计属性的get和set访问器,可以实现数据验证和业务逻辑。同时,掌握各种数据格式的使用,能够帮助我们更好地处理和展示数据。理解这些基本概念和技巧,对于日常的C#...
在这个例子中,`MyProperty`是一个抽象属性,其get和set访问器都是抽象的。任何继承自`BaseClass`的类都需要实现这个属性: ```csharp public class DerivedClass : BaseClass { public override int MyProperty {...
在C#中,属性提供了一种语法糖,使得我们可以通过简洁的get和set访问器来操作私有字段,从而提高了代码的可读性和可维护性。下面将对C#属性的各个方面进行深入探讨。 ### 1. 属性的基本结构 属性通常由两部分组成...
访问器是用于访问字段的方法,包括 get 和 set 方法。get 方法用于获取字段的值,而 set 方法用于设置字段的值。 5. 属性的合法性 在面向对象编程中,属性的合法性是非常重要的。例如,在设定年龄属性时,我们需要...
例如,可以通过属性来实现只读或只写的字段,也可以在属性的get和set访问器中加入逻辑判断,确保数据的有效性和一致性。 总结来说,C#编程规则与技巧涵盖了泛型编程的概念、实现机制、特点以及基本使用方法,还包括...
接口属性是接口中声明的属性,它们不包含任何实现,只有属性的签名,即get和set访问器。接口属性的目的是为了规定实现该接口的类必须提供相应的属性。 接口属性的声明如下: ```csharp public interface ...
本文将详细讲解如何使用C#语言来实现对Redis数据库的访问,以便充分利用其高效特性来提升应用性能。 首先,要实现C#访问Redis,我们需要一个客户端库。StackExchange.Redis是.NET开发者广泛使用的官方推荐库,它...
`get`访问器返回`stuName`的值,`set`访问器则更新`stuName`的值。`value`关键字在setter中用于接收要赋给字段的新值。 2. **访问控制**: 属性的访问修饰符可以是public、private、protected、internal等,这决定...