可防止空指针异常等问题。读写属性下可以做更多的验证操作。
“读写属性下可以做更多的验证操作”是不是指“在属性读、写方法里写一些代码保证数据没问题再返回或赋值?” 明靓 发表于 2023-12-26 19:09
写:小鸟没有做房子,把窝搭在树丫上,没有锁门,然后在里面下了三个小鸟蛋,有一天,杜鹃鸟看小鸟妈妈不在偷偷 ...
应该搭个房子保证自己财产安全,还得有安保,不能谁都能进。哈哈 同问 hs999xl 发表于 2023-12-26 19:16
应该搭个房子保证自己财产安全,还得有安保,不能谁都能进。哈哈
对了,这就是属性写和属性读的作用:P 读属性、写属性以及直接操作类变量的区别如下:
读属性:获取类的成员变量值。
写属性:设置类的成员变量值。
直接操作类变量:直接对类变量进行操作,包括赋值、修改等。
三者区别如下:
读属性:通过getter方法获取类的成员变量值,不会对成员变量造成影响。
写属性:通过setter方法设置类的成员变量值,不会对成员变量造成影响。
直接操作类变量:直接对类变量进行操作,可能会对类的状态造成影响。 读属性和写属性在C#等面向对象编程语言中是指属性的访问器(accessors):
1. **读属性(getter)**:它允许外部代码获取属性的值,但不允许直接修改。当你只想让其他对象读取一个变量的值,而不希望它们直接修改这个值时,你会声明一个只读属性。
```csharp
public string Name { get; private set; }
```
在这个例子中,`Name`是一个读/写属性,但它的设置器(setter)是私有的,所以外部代码只能读取,不能直接写入。
2. **写属性(setter)**:它允许外部代码设置属性的值。当你希望其他对象能够修改一个变量的值时,你会声明一个可写的属性。
```csharp
public int Age { get; set; }
```
在这个例子中,`Age`是一个读/写属性,外部代码可以读取和修改其值。
3. **直接操作类变量(字段或实例变量)**:不通过属性访问器,而是直接访问和修改类内部的变量。这种方式提供了最大的灵活性,但也可能降低代码的封装性和安全性。
```csharp
private string _name;
public string Name {
get { return _name; }
set { _name = value; }
}
```
在这个例子中,`_name`是直接操作的类变量,而`Name`是用于封装 `_name` 的一个属性。
区别在于:
- **封装性**:属性提供了对类内部状态(变量)的封装,可以通过 getter 和 setter 控制对这些状态的访问。直接操作类变量则没有这种级别的控制,任何具有访问权限的代码都可以直接修改变量。
- **一致性**:通过属性,可以在获取或设置值时执行额外的操作,如验证、转换或触发事件。直接操作类变量则不会自动执行这些额外操作。
- **可维护性**:如果以后需要改变类的实现细节(如添加验证逻辑或改变存储方式),使用属性的话只需修改属性的 getter 和 setter,而直接操作类变量的代码可能需要在多个地方进行修改。
因此,通常建议使用属性来公开类的内部状态,而不是直接暴露类变量,以提高代码的封装性、一致性和可维护性。 说白了,1/权限问题,2/高代码的封装性、一致性和可维护性。 urenai 发表于 2023-12-26 22:15
读属性和写属性在C#等面向对象编程语言中是指属性的访问器(accessors):
1. **读属性(getter)**:它 ...
真专业!
页:
1
[2]