如何调用基接口方法? [英] How can I call base interface method?
问题描述
如何调用基本接口方法?
class ThirdPartyClass:IDisposable {//我无法修改此类
void IDisposable.Dispose( ){
Console.WriteLine(" ThirdPartyClass Dispose");
}
}
class MyClass:ThirdPartyClass,IDisposable {
void IDisposable.Dispose(){
Console.WriteLine(" MyClass Dispose");
//base.IDisposable.Dispose(); //我怎么能这样做!!!!
}
}
< jo*@martinsound.com>写道:如何调用基接口方法?
类ThirdPartyClass:IDisposable {//我无法修改此类
void IDisposable.Dispose() {
Console.WriteLine(" ThirdPartyClass Dispose);
}
}
类MyClass:ThirdPartyClass,IDisposable {
void IDisposable.Dispose( ){
Console.WriteLine(" MyClass Dispose);
//base.IDisposable.Dispose(); //我怎么能这样做!!!!
}
}
好问题 - 说实话,我不是*想*你可以......
-
Jon Skeet - < sk *** @ pobox.com>
http://www.pobox.com/~skeet
如果回复小组,请不要给我发邮件
jo*@martinsound.com 写道:如何调用基接口方法?
类ThirdPartyClass:IDisposable {//我无法修改此class
void IDisposable.Dispose(){
Console.WriteLine(" ThirdPartyClass Dispose));
}
类MyClass:ThirdPartyClass, IDisposable {
void IDisposable.Dispose(){
Console.WriteLine(" MyClass Dispose));
// base.IDisposable.Dispose(); //我怎么能这样做!!!!
}
}
通常当基类实现IDisposable时,它也会实现
a" protected virtual void Dispose(bool disposing)"实际完成了清理工作......(如果操作正确)。
和Dispose()方法调用它。
尝试覆盖它如下:
class ThirdPartyClass:IDisposable
{//我无法修改此类
void IDisposable.Dispose()
{
GC.SuppressFinalize(this);
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
Console.WriteLine(" ThirdPartyClass Dispose" );
}
}
class MyClass:ThirdPartyClass,IDisposable
{
protected override void Dispose(bool disposing)
{
//在这里清理
Console.WriteLine(" MyClass Dispose");
base.Dispose(disposing);
}
}
如果它没有实现Dispose(bool处理)
那么你应该像你一样,只做:
class ThirdPartyClass:IDisposable
{//我不能修改这个类
void IDisposable.Dispose()
{
Console.WriteLine(" ThirdPartyClass Dispose" );
}
}
class MyClass:ThirdPartyClass,IDisposable
{
void IDisposable.Dispose()
{
Console.WriteLine(" MyClass Dispose");
base.Dispose (); //只需调用
Dispose的基类实现。
}
}
干杯,
Eyal。
jo*@martinsound.com 写道:如何调用基接口方法?
类ThirdPartyClass:IDisposable {//我可以不修改此类
void IDisposable.Dispose(){
Console.WriteLine(" ThirdPartyClass Dispose);
}
}
类MyClass :ThirdPartyClass,IDisposable {
void IDisposable.Dispose(){
Console.WriteLine(" MyClass Dispose));
//base.IDisposable.Dispose(); //我怎么能这样做!!!!
}
}
通常当基类实现IDisposable时,它也会实现
a" protected virtual void Dispose(bool disposing)"实际完成了清理工作......(如果操作正确)。
和Dispose()方法调用它。
尝试覆盖它如下:
class ThirdPartyClass:IDisposable
{//我无法修改此类
void IDisposable.Dispose()
{
GC.SuppressFinalize(this);
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
Console.WriteLine(" ThirdPartyClass Dispose" );
}
}
class MyClass:ThirdPartyClass,IDisposable
{
protected override void Dispose(bool disposing)
{
//在这里清理
控制台。 WriteLine(MyClass Dispose);
base.Dispose(disposing);
}
}
如果它没有实现Dispose(bool处理)并且它实现了
IDisposable as:void IDisposable.Dispose(),然后我猜你是
搞砸...... :(
干杯,
Eyal。
How can I call a base interface method?
class ThirdPartyClass :IDisposable { //I can not modify this class
void IDisposable.Dispose() {
Console.WriteLine( "ThirdPartyClass Dispose" );
}
}
class MyClass :ThirdPartyClass, IDisposable {
void IDisposable.Dispose() {
Console.WriteLine( "MyClass Dispose" );
//base.IDisposable.Dispose(); //How can I do this !!!!
}
}
<jo*@martinsound.com> wrote:How can I call a base interface method?
class ThirdPartyClass :IDisposable { //I can not modify this class
void IDisposable.Dispose() {
Console.WriteLine( "ThirdPartyClass Dispose" );
}
}
class MyClass :ThirdPartyClass, IDisposable {
void IDisposable.Dispose() {
Console.WriteLine( "MyClass Dispose" );
//base.IDisposable.Dispose(); //How can I do this !!!!
}
}
Good question - and to be honest, I don''t *think* you can...
--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too
jo*@martinsound.com wrote:How can I call a base interface method?
class ThirdPartyClass :IDisposable { //I can not modify this class
void IDisposable.Dispose() {
Console.WriteLine( "ThirdPartyClass Dispose" );
}
}
class MyClass :ThirdPartyClass, IDisposable {
void IDisposable.Dispose() {
Console.WriteLine( "MyClass Dispose" );
//base.IDisposable.Dispose(); //How can I do this !!!!
}
}
Hi,
Usually when a base class implements an IDisposable, it also implements
a "protected virtual void Dispose(bool disposing)" where the acctually
cleanup is done... (if it is done correctly).
and the Dispose() method calls it.
try to override it as follow:
class ThirdPartyClass :IDisposable
{ //I can not modify this class
void IDisposable.Dispose()
{
GC.SuppressFinalize(this);
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
Console.WriteLine( "ThirdPartyClass Dispose" );
}
}
class MyClass :ThirdPartyClass, IDisposable
{
protected override void Dispose(bool disposing)
{
// Do your cleanup here
Console.WriteLine( "MyClass Dispose" );
base.Dispose(disposing);
}
}
if it doesn''t implement a Dispose(bool disposing)
then you should do as you did, only:
class ThirdPartyClass :IDisposable
{ //I can not modify this class
void IDisposable.Dispose()
{
Console.WriteLine( "ThirdPartyClass Dispose" );
}
}
class MyClass :ThirdPartyClass, IDisposable
{
void IDisposable.Dispose()
{
Console.WriteLine( "MyClass Dispose" );
base.Dispose(); // just call the base class implementation of the
Dispose.
}
}
Cheers,
Eyal.
jo*@martinsound.com wrote:How can I call a base interface method?
class ThirdPartyClass :IDisposable { //I can not modify this class
void IDisposable.Dispose() {
Console.WriteLine( "ThirdPartyClass Dispose" );
}
}
class MyClass :ThirdPartyClass, IDisposable {
void IDisposable.Dispose() {
Console.WriteLine( "MyClass Dispose" );
//base.IDisposable.Dispose(); //How can I do this !!!!
}
}
Hi,
Usually when a base class implements an IDisposable, it also implements
a "protected virtual void Dispose(bool disposing)" where the acctually
cleanup is done... (if it is done correctly).
and the Dispose() method calls it.
try to override it as follow:
class ThirdPartyClass :IDisposable
{ //I can not modify this class
void IDisposable.Dispose()
{
GC.SuppressFinalize(this);
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
Console.WriteLine( "ThirdPartyClass Dispose" );
}
}
class MyClass :ThirdPartyClass, IDisposable
{
protected override void Dispose(bool disposing)
{
// Do your cleanup here
Console.WriteLine( "MyClass Dispose" );
base.Dispose(disposing);
}
}
if it doesn''t implement a Dispose(bool disposing) and it implements the
IDisposable as: void IDisposable.Dispose(), then I guess you are
screwed... :(
Cheers,
Eyal.
这篇关于如何调用基接口方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!