Guys,

I have a question that I need some help with in regards to implementing an
interface.
I've been a VB programmer for most of my career and now I use C#.  Some of
the functionality that I used in VB seems to be lacking in C#.
I wanted to know if it's my imagination or if there's a workaround.

The base problem is that I want to change the access level on interface
methods once they are implemented in a class.  However, C# seems to cry and
such changes and VB seems to allow them.  Here's the example:

Here's the VB example:

Public Interface IBusiness

   Sub Remove()
   Sub Save()
   Property ID() As Guid

End Interface

Public MustInherit Class T
   Implements IBusiness

   Public MustOverride Sub DoStuff()

   Protected Friend Overridable Property ID() As System.Guid Implements
IBusiness.ID
       Get

       End Get
       Set(ByVal value As System.Guid)

       End Set
   End Property

   Protected Friend Overridable Sub Remove() Implements IBusiness.Remove

   End Sub

   Protected Friend Overridable Sub Save() Implements IBusiness.Save

   End Sub

End Class

Notice in this example that these methods are the implementation for
IBusiness, but I changed the access modifiers to Protected Friend instead of
public or something else.

Now, in C#, if I try to do the same, I get a compiler error:

   public interface IBusiness {

       void Remove();
       void Save();
       Guid ID { get; set;}

   }

   public abstract class T: IBusiness {


       #region IBusiness Members

       public void Remove() {
           throw new Exception("The method or operation is not
implemented.");
       }

       public void Save() {
           throw new Exception("The method or operation is not
implemented.");
       }

       public Guid ID {
           get {
               throw new Exception("The method or operation is not
implemented.");
           }
           set {
               throw new Exception("The method or operation is not
implemented.");
           }
       }

       #endregion

   }

If I change the public members to protected or private I get an error.  If I
change them to explicit implementation, then I cannot access them regardless
unless I cast to the interface.

What I'm want to do is implement an interface in a base class (so that I
don't have to implement it in every derived class) and then "re-implement"
for the derived class where necessary but have a protected internal access
modifier.

Any suggestions or am I barking up the wrong tree here?

Thanks,
Mike

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to