[疑难] 谁能介绍一下D语言面向对象的特性

yntcsb 2009-04-09
最近在学习中发现几乎所有面向对象的语言都有这三个特性:封装、继承、多态。
对D语言中的前两个特性我还能大体明白,但D语言中的多态怎样进行就非常费解了,还请D高手们不要保守。

也许像我一样的初学者也会面临这个问题。
Colorful 2009-04-09
或许俺的这篇文章 D语言的陷阱 能对你有些帮助。

这篇文章成文比较早(那时 D 1.0 还未正式发布),关于面向对象这三大特性讲的并不是很详细,而且注重"陷阱",呵呵。

其实,多态大概可以分为编译时多态和运行时多态。

编译时多态主要由泛型模板来实现,C++ 0x 的 concept 就是一个很好的编译时多态体现。
运行时多态的范围比较广。最主要的实现机制是虚方法调用和接口继承。
d2008 2009-04-10
Colorful , 我看了的文章,写得不错,但我觉得C#的 封装、继承、多态, 及命名空间的概念 都要比Java 和D 都要好!
我个人觉得,D 真的要好好向 C# 的这些特性 好好学习学习!
yntcsb 2009-04-19

《D语言的陷阱》一文中提到D语言中默认成员数据和成员函数是public的问题,诚然,如作者所说,对于信息隐藏原则来说,默认为private才合理。但我从

http://www.blueidea.com/tech/program/2004/2171_4.asp

这篇文档里看出,private声明的数据成员和成员函数实现时,每个具体的对象都有一份,而公有成员,也就是用public声明的成员,整个类共享一份,而不是每个具体的对象都有一份。因此,我个人认为,D语言出于优化的目的,设默认的特征声明为public也是可以理解的,关键在于我们使用的习惯,如果确实需要隐藏的信息,记着加上private声明也就行了。不同的理念,适应了就好。

oldrev 2009-04-19
C#最大的创新在 Attribute
d2008 2009-05-05
yntcsb 写道

《D语言的陷阱》一文中提到D语言中默认成员数据和成员函数是public的问题,诚然,如作者所说,对于信息隐藏原则来说,默认为private才合理。但我从

http://www.blueidea.com/tech/program/2004/2171_4.asp

这篇文档里看出,private声明的数据成员和成员函数实现时,每个具体的对象都有一份,而公有成员,也就是用public声明的成员,整个类共享一份,而不是每个具体的对象都有一份。因此,我个人认为,D语言出于优化的目的,设默认的特征声明为public也是可以理解的,关键在于我们使用的习惯,如果确实需要隐藏的信息,记着加上private声明也就行了。不同的理念,适应了就好。

 

应该这样理解:


有public 声明的类成员表明它是对外“公开”的,是对成员 可访问性 而言的,把它说成“公有成员”其实并不太合理,如说成“公开成员”还更符合声明的本意。所以,有public 声明的成员,在任何可以调用类的地方,都可以通过类本身或类实例来访问这个成员。(因为成员的可访问性是公开的嘛)

 

有static声明的成员,倒更符合“公有”这个词,因为它是所有的类实例 共用一份 的,所以称它为“公有成员”或“公共成员”来得恰当。在D语言中可以用类本身或类实例去访问(C#只能用类本身去访问)。

Global site tag (gtag.js) - Google Analytics