递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库

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

查看数: 4817 | 评论数: 17 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-12-26 16:57

正文摘要:

公开成员变量也能读写 定义属性读、写方法也能读写 这有什么区别吗?

回复

hs999xl 发表于 2023-12-26 23:18:07
urenai 发表于 2023-12-26 22:15
读属性和写属性在C#等面向对象编程语言中是指属性的访问器(accessors):

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

真专业!
urenai 发表于 2023-12-26 22:16:28
说白了,1/权限问题,2/高代码的封装性、一致性和可维护性。
urenai 发表于 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,而直接操作类变量的代码可能需要在多个地方进行修改。

因此,通常建议使用属性来公开类的内部状态,而不是直接暴露类变量,以提高代码的封装性、一致性和可维护性。
urenai 发表于 2023-12-26 22:09:47
读属性、写属性以及直接操作类变量的区别如下:

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

读属性:通过getter方法获取类的成员变量值,不会对成员变量造成影响。
写属性:通过setter方法设置类的成员变量值,不会对成员变量造成影响。
直接操作类变量:直接对类变量进行操作,可能会对类的状态造成影响。
明靓 发表于 2023-12-26 21:24:07
hs999xl 发表于 2023-12-26 19:16
应该搭个房子保证自己财产安全,还得有安保,不能谁都能进。哈哈

对了,这就是属性写和属性读的作用
715684 发表于 2023-12-26 19:54:41
同问   
hs999xl 发表于 2023-12-26 19:16:49
明靓 发表于 2023-12-26 19:09
写:小鸟没有做房子,把窝搭在树丫上,没有锁门,然后在里面下了三个小鸟蛋,有一天,杜鹃鸟看小鸟妈妈不在偷偷 ...

应该搭个房子保证自己财产安全,还得有安保,不能谁都能进。哈哈
hs999xl 发表于 2023-12-26 19:11:31
创世魂 发表于 2023-12-26 19:03
可防止空指针异常等问题。读写属性下可以做更多的验证操作。

“读写属性下可以做更多的验证操作”是不是指“在属性读、写方法里写一些代码保证数据没问题再返回或赋值?”
明靓 发表于 2023-12-26 19:09:24
hs999xl 发表于 2023-12-26 19:00
想请教下,不安全的写是什么?如何操作变量是不安全的?

写:小鸟没有做房子,把窝搭在树丫上,没有锁门,然后在里面下了三个小鸟蛋,有一天,杜鹃鸟看小鸟妈妈不在偷偷地在里面下了个杜鹃鸟蛋,然后就飞走了,小鸟妈妈莫名其妙地就帮杜鹃鸟养它的孩子.

读:鸟窝露天在外面,有一天窝里来了条蛇,把蛋吃了.

怎样?有何感想?

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

GMT+8, 2024-11-24 01:07 , Processed in 0.090184 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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