递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
12
返回列表 发新帖
楼主: hs999xl
打印 上一主题 下一主题

[其它] 公开成员变量方式读写有什么缺点?

[复制链接]

73

主题

338

帖子

2015

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2015
11#
 楼主| 发表于 2023-12-26 19:11:31 | 只看该作者
创世魂 发表于 2023-12-26 19:03
可防止空指针异常等问题。读写属性下可以做更多的验证操作。

“读写属性下可以做更多的验证操作”是不是指“在属性读、写方法里写一些代码保证数据没问题再返回或赋值?”
回复

使用道具 举报

73

主题

338

帖子

2015

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2015
12#
 楼主| 发表于 2023-12-26 19:16:49 | 只看该作者
明靓 发表于 2023-12-26 19:09
写:小鸟没有做房子,把窝搭在树丫上,没有锁门,然后在里面下了三个小鸟蛋,有一天,杜鹃鸟看小鸟妈妈不在偷偷 ...

应该搭个房子保证自己财产安全,还得有安保,不能谁都能进。哈哈
回复

使用道具 举报

0

主题

54

帖子

327

积分

中级会员

Rank: 3Rank: 3

积分
327
13#
发表于 2023-12-26 19:54:41 | 只看该作者
同问   
回复

使用道具 举报

15

主题

369

帖子

1533

积分

核心用户

易语言+火山+HTML+SQL

Rank: 9Rank: 9Rank: 9

积分
1533
QQ
14#
发表于 2023-12-26 21:24:07 | 只看该作者
hs999xl 发表于 2023-12-26 19:16
应该搭个房子保证自己财产安全,还得有安保,不能谁都能进。哈哈

对了,这就是属性写和属性读的作用
---------QQ:884905066 明靓---------
回复

使用道具 举报

346

主题

1600

帖子

6535

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6535
QQ
15#
发表于 2023-12-26 22:09:47 | 只看该作者
读属性、写属性以及直接操作类变量的区别如下:

读属性:获取类的成员变量值。
写属性:设置类的成员变量值。
直接操作类变量:直接对类变量进行操作,包括赋值、修改等。
三者区别如下:

读属性:通过getter方法获取类的成员变量值,不会对成员变量造成影响。
写属性:通过setter方法设置类的成员变量值,不会对成员变量造成影响。
直接操作类变量:直接对类变量进行操作,可能会对类的状态造成影响。
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

346

主题

1600

帖子

6535

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6535
QQ
16#
发表于 2023-12-26 22:15:25 | 只看该作者
读属性和写属性在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,而直接操作类变量的代码可能需要在多个地方进行修改。

因此,通常建议使用属性来公开类的内部状态,而不是直接暴露类变量,以提高代码的封装性、一致性和可维护性。
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

346

主题

1600

帖子

6535

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6535
QQ
17#
发表于 2023-12-26 22:16:28 | 只看该作者
说白了,1/权限问题,2/高代码的封装性、一致性和可维护性。
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

73

主题

338

帖子

2015

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2015
18#
 楼主| 发表于 2023-12-26 23:18:07 | 只看该作者
urenai 发表于 2023-12-26 22:15
读属性和写属性在C#等面向对象编程语言中是指属性的访问器(accessors):

1. **读属性(getter)**:它 ...

真专业!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-23 22:40 , Processed in 0.092151 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表