惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
N
Netflix TechBlog - Medium
F
Full Disclosure
I
InfoQ
Jina AI
Jina AI
GbyAI
GbyAI
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
腾讯CDC
博客园 - 司徒正美
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
F
Fortinet All Blogs
B
Blog
A
About on SuperTechFans
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
C
Check Point Blog
J
Java Code Geeks
L
LangChain Blog
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
爱范儿
爱范儿
Recorded Future
Recorded Future
小众软件
小众软件
Microsoft Security Blog
Microsoft Security Blog
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
IT之家
IT之家
博客园 - 聂微东
量子位
G
Google Developers Blog
Vercel News
Vercel News
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
MyScale Blog
MyScale Blog
罗磊的独立博客
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - 香依香偎孤旅独行的驿站

读书笔记三 读书笔记二 读书笔记一 计算机加法 简繁体转换 所未见的2009 质数筛选器 让自己闪亮 去医院看病 新手训练课 其言也善哉 伟大的央视 25岁,成人礼 成长的寓言 登梧桐者说 合理或违规 Code 的价值 阿贾克斯踵 来玩个游戏
界面和细节
香依香偎孤旅独行的驿站 · 2005-10-07 · via 博客园 - 香依香偎孤旅独行的驿站

界面和细节

给个关于 C# 的属性的例子。

在 JAVA 里,大致是这样的。

public class Person
{
    
private String _name;

    
public void setName ( String name )
    
{
        _name 
= name.Upper();
    }


    
public String getName ( )
    
{
        
return _name.Upper();
    }

}


然后获取和设置的时候需要:

    Person _p = new Person();
    _p.setName (
"henkoo");        //setter
    String _pName = _p.getName(); //getter


基于 JAVA 写成的《重构》里提到,在“值域访问方式”这个问题上,存在两种截然不同的观点:其中一派认为,在该变量定义所在的 Class 中应该自由(直接)访问他;另一派认为,即使在这个 Class 中,也应该只使用访问函数间接访问之。两派的争论如火如荼。

其中,“间接访问变量” 的好处是,subclass 得以通过“覆写一个函数”而改变获取数据的途径,更支持灵活的数据管理方式。“直接访问变量”的好处则是,代码比较容易阅读。阅读代码的时候,不会需要停下来说,“啊,这只是个取值函数”。

随后,《重构》提供了 Self Encapsulate Field 这个方式来将对 field 的直接访问改为通过访问函数的间接访问。

==============

在 C# 中,可以这样。

public class Person
{
    
private string _name;

    
public string Name
    
{
        
set
        
{
            _name 
= value.toUpper();
        }


        
get
        
{
            
return _name.toUpper();
        }

    }

}

接下来的设置和获取:

    Person _p = new Person();
    _p.Name =
"henkoo";      //setter
    String _pName = _p.Name; //getter


其实改动不大。这里的 Name 就是一个属性(Prototype)。与字段(field)一致的访问方式,与 getter、setter 访问函数一致的处理方式,而且同样支持虚拟、继承和多态。这就是所谓的“公开的一致的接口界面,和隐藏起来的Get、Set的计算细节”。

从这里看来,JAVA 的那套争论是否有些多余:)

posted on 2005-10-07 17:28  香依香偎孤旅独行的驿站  阅读(552)  评论()    收藏  举报