On Mon, 29 Nov 2010 09:13:17 -0500 "Steven Schveighoffer" <schvei...@yahoo.com> wrote:
> A class is a reference type. Every operation on a class instance operates > on all aliases to that class, only assignment to another class instance of > the same type decouples it. > > Consider these two statements: > > "a class is a reference type" > > class C > { > int length; > } > > foo(C c) > { > c.length = 5; // because a class is a reference type, this affects the > original, right? > } > > "an array is a reference type" > > foo(int[] arr) > { > arr.length = 5; // because an array is a reference type, this affects > the original, right? No?!!! > } > > This is the major confusion that I think people see. I would say people > assume a "reference type" means that the reference's members are all > shared between all aliases. For an array, it is one level removed, and > that confuses the hell out of people. But the power gained by doing D's > way is worth way waaaay more than confusing some noobs. > > Note that many people are used to object-based languages such as C# and > Java where arrays actually *are* class instances, and therefore full > reference types. Very good explanation of the mental issue for newcomers. Note that this does not apply only to people coming from languages similar to Java or C#, but also from most, if not all, dynamic languages (including one that are not "officially" OO, like Lua). Denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com