On Tue, 29 Jun 2010 06:58:54 -0400, BLS <windev...@hotmail.de> wrote:

On 29/06/2010 12:32, Jonathan M Davis wrote:
So, there certainly won't be any restriction on
having a getter or setter in a class if an interface it implements declared only one. It's just that you'll only be able to use the one that's part of the interface if you're using a reference of the interface type rather than the
implementing class.

Hi Jonathan,
interesting : this snippet compiles.

interface IBindingList {
                
        @property bool AllowEdit();


class A : IBindingList {
        private bool _allowEdit;

        @property {
                bool AllowEdit() { return _allowEdit;   }
                bool AllowEdit(bool enable) { return _allowEdit = enable; }
        }       
}

But this one NOT.

interface IBindingList {
                
        @property bool AllowEdit();
        @property bool AllowEdit(bool enable);
}
class A : IBindingList {
        private bool _allowEdit;

        @property {
                bool AllowEdit() { return _allowEdit;   }
        }       
}
IMO this is bad design.

Classes are always able to add functionality beyond what the interface declares. IMO, it's actually bad design of C# not to allow you to declare setters even if the interface declares only a getter.

If you access an A instance through the IBindingList, you only have access to a getter, so it is properly implementing the interface. I don't see why adding a setter detracts from it.

What if you had this in C#?

interface I1
{
   int x { get; }
}

interface I2
{
   int x {get; set;}
}

class C : I1, I2 // my C# is a bit rusty, I can't remember if this is how you implement interfaces
{
  ???
}

Besides, try to do this in C#:

@property int value() {return _x;}
@property int value(int x) { return _x = x;}
@property int value(string s) { return _x = to!int(s);}

:)  D's properties are so much better...

-Steve

Reply via email to