如何调用基接口方法? [英] How can I call base interface method?

查看:70
本文介绍了如何调用基接口方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何调用基本接口方法?


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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆