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

Reply via email to