forbid field name conflict in class hierarchy
spir
denis.spir at gmail.com
Sun Nov 14 11:29:55 PST 2010
On Sun, 14 Nov 2010 22:09:59 +0300
Stanislav Blinov <stanislav.blinov at gmail.com> wrote:
> spir wrote:
> > Hello,
> >
> >
> > I think the compiler should complain when sub-classes hold fields with the same name as super-classes. After all, names (in addition to types) are used to identify. Intentionally reusing the same name would not only be bad design, but open the door to hidden bugs.
> > Remain unintentional name crash: eg forgot to remove a field when established type hierarchy. Allowing same names lead to strange contradictions by the language -- see below. Without such a rigor imposed the compiler, we can easily fall into traps such as:
> >
> > class C {
> > int i;
> > this (int i) {
> > this.i = i;
> > }
> > }
> > class C1 : C {
> > // forgot to remove i
> > int i;
> > int j;
> > this (int i, int j) {
> > super(i); // think i is set?
> > this.j = j;
> > }
> > }
> > void main () {
> > auto c1 = new C1(1,2);
> > writeln(c1.i); // 0
> > }
> >
> > Got me 3 times already. I don't understand how it is even possible that C.i is not the same as C1.i, but evidence is here... There is a contradiction: i is set && not set. (explaination welcome ;-)
> >
> > Denis
> > -- -- -- -- -- -- --
> > vit esse estrany ☣
> >
> > spir.wikidot.com
> >
>
> This issue has been brought up several times before. I myself see no
> harm in this shadowing, though making a compiler issue a warning
> when shadowing *public* fields occurs would be a good thing.
> Shadowing non-public fields, in my opinion, is harmless, and preventing
> it would actually narrow down name choice with each subsequent subclassing.
I don't understand in which case you need to reuse the same name in a subclass for a _different_ field -- whether the field is public or private does not seem really relevant to me. But maybe I overlook some common use case.
> The other option that comes to mind is simply disallow public fields for
> classes. This may sound too strict, but I think that public fields is
> something that's not as usable for classes as for structs.
Here, I guess you're touching programming style. I personly am allergic to accessors for everything.
Denis
-- -- -- -- -- -- --
vit esse estrany ☣
spir.wikidot.com
More information about the Digitalmars-d
mailing list