Then why is the interface public?
Thanks, Shawn Wildermuth Wildermuth Consulting Services, LLC http://adoguy.com C# MVP, MCSD.NET, Author and Speaker > -----Original Message----- > From: Discussion of advanced .NET topics. > [mailto:[EMAIL PROTECTED] On Behalf Of Mike Andrews > Sent: Friday, July 07, 2006 4:22 PM > To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM > Subject: Re: [ADVANCED-DOTNET] Implementing an Interface - C# > vs. VB.NET > > The answer is that I want these methods to be utilized only > within the context of the namespace they are in. I don't > want them accessible outside, but only used as internal > features of the object. > > Thanks, > Mike > > On 7/7/06, Shawn Wildermuth <[EMAIL PROTECTED]> wrote: > > > > Then I would: > > > > public abstract class T: IBusiness { > > > > public virtual void Remove() { > > throw new Exception("The method or operation is not > implemented."); > > } > > > > public virtual void Save() { > > throw new Exception("The method or operation is not > > implemented."); } > > > > public virtual Guid ID { > > get { > > throw new Exception("The method or operation is not > implemented."); > > } > > set { > > throw new Exception("The method or operation is not > implemented."); > > } > > } > > } > > > > I am not sure based on your explanation so far, why you > need to hide > > the methods/properties with protected/internal in the base > class? Its > > abstract so you can't create an instance of it anyway. > > > > A derived class could: > > > > public class X : T > > { > > public override void Remove() > > { > > // call base implemenation > > base:Remove(); > > > > // do more stuff > > } > > } > > > > If you want to get fancy and unnecessary you could also: > > > > public abstract class T: IBusiness { > > > > public virtual void Remove() { > > innerRemove(); > > } > > > > // ... rest of interface > > > > protected internal void innerRemove() > > { > > // do remove work here > > } > > > > // ... rest of interface > > } > > > > But that seems silly to me... > > > > HTH > > > > Thanks, > > > > Shawn Wildermuth > > Wildermuth Consulting Services, LLC > > http://adoguy.com > > C# MVP, MCSD.NET, Author and Speaker > > > > > > > -----Original Message----- > > > From: Discussion of advanced .NET topics. > > > [mailto:[EMAIL PROTECTED] On Behalf Of Mike > > > Andrews > > > Sent: Friday, July 07, 2006 4:06 PM > > > To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM > > > Subject: Re: [ADVANCED-DOTNET] Implementing an Interface - C# vs. > > > VB.NET > > > > > > 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.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(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 DevelopMentorR 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 > > > > =================================== > This list is hosted by DevelopMentorR http://www.develop.com > > View archives and manage your subscription(s) at > http://discuss.develop.com =================================== This list is hosted by DevelopMentorĀ® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com