The only thing you I don't think you can do is make the explicit
implementation also a protected internal (although this doesn't make much
sense anyways since you are exposing it through a public interface). YOu can
still reimplement the interface without issue.
public interface IFoo {
void Bar();
}
class FooBase :IFoo {
void IFoo.Bar() {
Console.WriteLine("FooBase");
}
}
class FooDerived : FooBase, IFoo {
void IFoo.Bar() {
Console.WriteLine("FooDerived");
}
}
On 7/7/06, Mike Andrews <[EMAIL PROTECTED]> wrote:
Thank you.
However, that does not help with the idea that a base class implements an
interface and then I re-implement the interface on derived classes where
needed. This is so that ever class that inherits from the base class also
implements the interface, even if I do not re-implement it for the derived
class. But some derived classes will add their own functionality.
Thanks,
Mike
On 7/7/06, gregory young <[EMAIL PROTECTED]> wrote:
>
> You have to do whats called "explicitly implementing" a interface. See
> http://msdn2.microsoft.com/en-us/library/4taxa8t2.aspx
>
> Cheers,
>
> Greg
>
>
> On 7/7/06, Mike Andrews <[EMAIL PROTECTED]> wrote:
> >
> > 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.GuidImplements
> > 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(r) http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> >
>
>
>
> --
> If knowledge can create problems, it is not through ignorance that we
can
> solve them.
>
> Isaac Asimov
>
> ===================================
> This list is hosted by DevelopMentor(r) http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
===================================
This list is hosted by DevelopMentor(r) http://www.develop.com
View archives and manage your subscription(s) at
http://discuss.develop.com
--
If knowledge can create problems, it is not through ignorance that we can
solve them.
Isaac Asimov
===================================
This list is hosted by DevelopMentorĀ® http://www.develop.com
View archives and manage your subscription(s) at http://discuss.develop.com