473,397 Members | 1,969 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,397 software developers and data experts.

Calling explicity interface implementation from a subclass

Could someone tell me if it's possible (and if so, how) to call an
explicitly-implemented interface method from a subclass? I have a class in
which I have to explicity implement some methods, but my subclasses, which
should use them, cannot call them. I'm not sure if it just isn't possible
due to visibility or if I just don't have the syntax right. I can't make
the methods protected, as the compiler complains (although the documentation
for the error only says it's true of the "public" accessor, "protected" also
doesn't work, but when they use the default accessor, I can't get the
compiler to see the methods.
Nov 16 '05 #1
5 2425
Keith,

I am curious, since it is an interface implementation, why not just cast
the "this" pointer to the interface and make the call? Or do you mean you
want to call the base implementation?
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Keith Patrick" <ri*******************@nospamhotmail.com> wrote in message
news:eU****************@TK2MSFTNGP12.phx.gbl...
Could someone tell me if it's possible (and if so, how) to call an
explicitly-implemented interface method from a subclass? I have a class in which I have to explicity implement some methods, but my subclasses, which
should use them, cannot call them. I'm not sure if it just isn't possible
due to visibility or if I just don't have the syntax right. I can't make
the methods protected, as the compiler complains (although the documentation for the error only says it's true of the "public" accessor, "protected" also doesn't work, but when they use the default accessor, I can't get the
compiler to see the methods.

Nov 16 '05 #2
Hmmm...I tried this morning, but couldn't get it to work, but now it *is*
compiling (I hadn't dosed up with caffeine yet, so I could have been missing
something obvious). One major issue I am having that could have played a
role is that due to my hierarchy, I am having to do some delayed iface
implementations in subclasses (IDictionary.GetEnumerator vs.
IEnumerable.GetEnumerator is the primary culprit). Because I don't
implement ICollection at the base level, I am doing a lot of weird
implementations of my various methods. I'm going to rewrite my base classes
from scratch to get a cleaner look at my methods, and if things still aren't
working, I'll post actual code (right now, my code is too verbose to really
be postable within the context of this thread).

Thanks for the help!
"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote in
message news:uY**************@tk2msftngp13.phx.gbl...
Keith,

I am curious, since it is an interface implementation, why not just cast the "this" pointer to the interface and make the call? Or do you mean you
want to call the base implementation?
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Keith Patrick" <ri*******************@nospamhotmail.com> wrote in message
news:eU****************@TK2MSFTNGP12.phx.gbl...
Could someone tell me if it's possible (and if so, how) to call an
explicitly-implemented interface method from a subclass? I have a class

in
which I have to explicity implement some methods, but my subclasses, which should use them, cannot call them. I'm not sure if it just isn't possible due to visibility or if I just don't have the syntax right. I can't make the methods protected, as the compiler complains (although the

documentation
for the error only says it's true of the "public" accessor, "protected"

also
doesn't work, but when they use the default accessor, I can't get the
compiler to see the methods.


Nov 16 '05 #3
Here's a problem I'd forgotten about that further complicates things: My
hierarchy is like so:
abstract class EventfulCollection: ICollection
abstract class EventfulListCollection: IList (note to MS: FXCop flags
"EventfulLIst" as wrong because it implements ICollection and should
therefore end in "Collection". Why does FXCop not realize that it actually
implements the subinterface IList and let me name the thing IList? .Net
itself breaks this rule with ArrayList!)

The problem this causes is that I must declare ICollection.CopyTo(...), but
I don't want to implement the methods here, allowing my subclasses (some are
ILists, others are IDictionaries) to implement it themselves (and it isn't
just this method or this interface). So I can't say:
protected abstract CopyTo(...);

but I don't want to say:
ICollection.CopyTo(...) {...} because then I'm implementing code that I
don't want to implement here (EventfulCollection has no private collection,
deferring that until the subclasses, so I have to implement it as a no-op,
which I HATE doing in OO). I want EventfulCollection to satisfy ICollection
responsibilities at an absolute minimum so that actual implementation occurs
in the subclasses. However, I still need to hide the implementations such
that my type-specific collections have their own implementations that are
overridden versions of the parent methods.

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote in
message news:uY**************@tk2msftngp13.phx.gbl...
Keith,

I am curious, since it is an interface implementation, why not just cast the "this" pointer to the interface and make the call? Or do you mean you
want to call the base implementation?
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Keith Patrick" <ri*******************@nospamhotmail.com> wrote in message
news:eU****************@TK2MSFTNGP12.phx.gbl...
Could someone tell me if it's possible (and if so, how) to call an
explicitly-implemented interface method from a subclass? I have a class

in
which I have to explicity implement some methods, but my subclasses, which should use them, cannot call them. I'm not sure if it just isn't possible due to visibility or if I just don't have the syntax right. I can't make the methods protected, as the compiler complains (although the

documentation
for the error only says it's true of the "public" accessor, "protected"

also
doesn't work, but when they use the default accessor, I can't get the
compiler to see the methods.


Nov 16 '05 #4
Keith,

I've had this problem as well. I think that the best way to get around
it (although the most tedious) is to have abstract methods on the base class
which the implementation of the interface calls. Then, your sub classes
would just override the abstract methods, and you shouldn't have a problem
then.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com
"Keith Patrick" <ri*******************@nospamhotmail.com> wrote in message
news:eS**************@TK2MSFTNGP12.phx.gbl...
Here's a problem I'd forgotten about that further complicates things: My
hierarchy is like so:
abstract class EventfulCollection: ICollection
abstract class EventfulListCollection: IList (note to MS: FXCop flags
"EventfulLIst" as wrong because it implements ICollection and should
therefore end in "Collection". Why does FXCop not realize that it actually implements the subinterface IList and let me name the thing IList? .Net
itself breaks this rule with ArrayList!)

The problem this causes is that I must declare ICollection.CopyTo(...), but I don't want to implement the methods here, allowing my subclasses (some are ILists, others are IDictionaries) to implement it themselves (and it isn't
just this method or this interface). So I can't say:
protected abstract CopyTo(...);

but I don't want to say:
ICollection.CopyTo(...) {...} because then I'm implementing code that I
don't want to implement here (EventfulCollection has no private collection, deferring that until the subclasses, so I have to implement it as a no-op,
which I HATE doing in OO). I want EventfulCollection to satisfy ICollection responsibilities at an absolute minimum so that actual implementation occurs in the subclasses. However, I still need to hide the implementations such
that my type-specific collections have their own implementations that are
overridden versions of the parent methods.

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote in message news:uY**************@tk2msftngp13.phx.gbl...
Keith,

I am curious, since it is an interface implementation, why not just

cast
the "this" pointer to the interface and make the call? Or do you mean you
want to call the base implementation?
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Keith Patrick" <ri*******************@nospamhotmail.com> wrote in message news:eU****************@TK2MSFTNGP12.phx.gbl...
Could someone tell me if it's possible (and if so, how) to call an
explicitly-implemented interface method from a subclass? I have a
class in
which I have to explicity implement some methods, but my subclasses, which should use them, cannot call them. I'm not sure if it just isn't possible due to visibility or if I just don't have the syntax right. I can't make the methods protected, as the compiler complains (although the

documentation
for the error only says it's true of the "public" accessor,

"protected" also
doesn't work, but when they use the default accessor, I can't get the
compiler to see the methods.



Nov 16 '05 #5
The difficulty there (and I don't know if this is really the fault of the
language or the design of the hierarchy) is that I can't expose
IEnumerable.GetEnumerator() because my dictionary-based implementation has
to expose it as IDictionary.GetEnumerator(), which has a different return
type, so the dictionary version cannot expose both methods (unless one is an
explicity definition, which means I have to implement what should be
abstract)
"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote in
message news:OR*************@TK2MSFTNGP10.phx.gbl...
Keith,

I've had this problem as well. I think that the best way to get around it (although the most tedious) is to have abstract methods on the base class which the implementation of the interface calls. Then, your sub classes
would just override the abstract methods, and you shouldn't have a problem
then.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com
"Keith Patrick" <ri*******************@nospamhotmail.com> wrote in message
news:eS**************@TK2MSFTNGP12.phx.gbl...
Here's a problem I'd forgotten about that further complicates things: My
hierarchy is like so:
abstract class EventfulCollection: ICollection
abstract class EventfulListCollection: IList (note to MS: FXCop flags
"EventfulLIst" as wrong because it implements ICollection and should
therefore end in "Collection". Why does FXCop not realize that it

actually
implements the subinterface IList and let me name the thing IList? .Net
itself breaks this rule with ArrayList!)

The problem this causes is that I must declare ICollection.CopyTo(...),

but
I don't want to implement the methods here, allowing my subclasses (some

are
ILists, others are IDictionaries) to implement it themselves (and it isn't just this method or this interface). So I can't say:
protected abstract CopyTo(...);

but I don't want to say:
ICollection.CopyTo(...) {...} because then I'm implementing code that I
don't want to implement here (EventfulCollection has no private

collection,
deferring that until the subclasses, so I have to implement it as a no-op, which I HATE doing in OO). I want EventfulCollection to satisfy

ICollection
responsibilities at an absolute minimum so that actual implementation

occurs
in the subclasses. However, I still need to hide the implementations such that my type-specific collections have their own implementations that are overridden versions of the parent methods.

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote

in
message news:uY**************@tk2msftngp13.phx.gbl...
Keith,

I am curious, since it is an interface implementation, why not just
cast
the "this" pointer to the interface and make the call? Or do you mean

you want to call the base implementation?
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Keith Patrick" <ri*******************@nospamhotmail.com> wrote in message news:eU****************@TK2MSFTNGP12.phx.gbl...
> Could someone tell me if it's possible (and if so, how) to call an
> explicitly-implemented interface method from a subclass? I have a class in
> which I have to explicity implement some methods, but my subclasses,

which
> should use them, cannot call them. I'm not sure if it just isn't

possible
> due to visibility or if I just don't have the syntax right. I can't

make
> the methods protected, as the compiler complains (although the
documentation
> for the error only says it's true of the "public" accessor, "protected" also
> doesn't work, but when they use the default accessor, I can't get

the > compiler to see the methods.
>
>



Nov 16 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: Jeff Louie | last post by:
Can anyone explain why a interface method implementation using the fully qualified name cannot be public or protected? Sample below: public interface IDrawable { void DrawYourself(); } public...
9
by: phl | last post by:
hi, I am kind of confused aobut interfaces and abstract classes. In short as I understand it, an interface is like a contract between the class and the interface, so that certain funtions must...
11
by: David Thielen | last post by:
Hi; I am writing a class that implements IDbConnection. The i/f defines a method BeginTransaction() that returns an IDbTransaction. I want to define this as returning a DbTransaction (as...
12
by: Ramon | last post by:
Hello I'm new to OOP in PHP and I have this question: I have a class called "Form", which contains a collection of classes (objects) called "Textbox". Now I need to call the Textbox class's...
6
by: Dave Booker | last post by:
I want to do something like this: public class Animal; public interface IZoo { List<Animal> Animals { get; } void Feed(Animal a); }
3
by: Matt F. | last post by:
I have an abstract class that about a dozen sub-classes inherit from. I want to enforce that each sub-class shadows an event in the abstract class, but can't quite figure out how to do this. ...
4
by: gabriel | last post by:
Hi Firstly i'd like to thank you for reading this and offer my appreciation for replies in advance. I've recently been writing a program which implements a user-defined API (Robocode to be...
20
by: Jorgen Bodde | last post by:
Hi All, Now that I am really diving into Python, I encounter a lot of things that us newbies find difficult to get right. I thought I understood how super() worked, but with 'private' members it...
47
by: teju | last post by:
hi, i am trying 2 merge 2 projects into one project.One project is using c language and the other one is using c++ code. both are working very fine independently.But now i need to merge both...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.