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. 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.
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.
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.
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.
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. > >
This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
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...
|
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...
|
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...
|
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...
|
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);
}
|
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.
...
|
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...
|
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...
|
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...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
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...
|
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...
|
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...
|
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...
|
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...
|
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...
|
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,...
|
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...
| |