I'm guessing that VB does something similar behind the scenes when compiling to IL. Otherwise it doesn't make any sense that VB allows such a construct but C# does not.
In VB6, your interface definitions always had to be private (it's been a while since I've done anything with VB6) and always accessed via the interface; that is similar to the explicit implementation of the interface in C#. On 7/7/06, gregory young <[EMAIL PROTECTED]> wrote:
If the interface isnt public then the explicit implementation's only difference is the need to go through the interface as opposed to the object. If you really want internal methods on your object as well .. (I would recommend using the interface instead but it seems to be your goal) class FooBase :IFoo { virtual internal void internalbar() { Console.WriteLine("FooBase"); } void IFoo.Bar() { this.internalbar(); } } class FooDerived : FooBase, IFoo { internal override void internalbar() { Console.WriteLine("DerivedFoo"); } } Will provide that for you ... This should exactly duplicate the method your VB code was working .. You can continue to override the functionality in derived classes for both the internal and for the interface method (you could even implement them seperately by reimplementing the interface. On 7/7/06, Mike Andrews <[EMAIL PROTECTED]> wrote: > > It shouldn't have been public. That was a mistake on my part. > > On 7/7/06, Shawn Wildermuth <[EMAIL PROTECTED]> wrote: > > > > 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(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(r) 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