c#中继承和接口的问题.

gaoyingjun 2007-03-15 06:37:31
//定义两个接口,有相同的方法
interface ISampleInterface
{
void SampleMethod();
}
interface ISampleInterface2
{
void SampleMethod();
}
//定义一个类实现接口,显式实现接口.
class ImplementationClass : ISampleInterface,ISampleInterface2
{

void ISampleInterface.SampleMethod()
{
System.Windows.Forms.MessageBox.Show("test");

}
void ISampleInterface2.SampleMethod()
{
System.Windows.Forms.MessageBox.Show("test2");

}

}
问题:就是void ISampleInterface.SampleMethod()不能加如public,virtual之类的关键字了,不知道是什么原因,各位高手解答下..
...全文
779 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
深度Java 2007-03-16
  • 打赏
  • 举报
回复
《visual C#2005从入门到精通》 微软出版社
深度Java 2007-03-16
  • 打赏
  • 举报
回复
使用显示接口实现来定义的一个方法不能声明为virtual,但在省略接口名之后允许。
使用显示接口实现,方法不应有一个访问修饰符。用于实现一个接口的所有方法都具有public可访问性。
本书的建议尽可能显示实现接口
《visual C#2005从入门到精通》p166 显示接口的优点。


北京的雾霾天 2007-03-16
  • 打赏
  • 举报
回复
像指定了接口类型的接口实现都不能有public了,在使用上也只能是通过(强制)转换获取对接口的应用。
北京的雾霾天 2007-03-16
  • 打赏
  • 举报
回复
显示实现的接口不能是Public的。
上面说错了。
gaoyingjun 2007-03-16
  • 打赏
  • 举报
回复
TO:sunrobust(咸鱼---翻身理想不灭)
你说:interface ISampleInterface
{
void SampleMethod();
}
interface ISampleInterface2
{
void SampleMethod();
}

你这两个接口里面的函数没有声明访问权限,C#默认为是private

所以在所有实现这两个接口的函数里面,都不能再声明为比private更开放的权限

----------------------------------
接口里面的成员默认都是public的把!!
gaoyingjun 2007-03-16
  • 打赏
  • 举报
回复
//这样也可以,加了关键字public ,virtual 也没问题
interface ISampleInterface
{void SampleMethod();}
class ImplementationClass : ISampleInterface
{
public virtual void SampleMethod()
{
System.Windows.Forms.MessageBox.Show("test");

}
static void Main()
{
ImplementationClass ic=new ImplementationClass();
ic.SampleMethod();
}
}
北京的雾霾天 2007-03-16
  • 打赏
  • 举报
回复
哦,对,是显示的。
gaoyingjun 2007-03-16
  • 打赏
  • 举报
回复
TO: 21aspnet(清清月儿)
使用显示接口实现来定义的一个方法不能声明为virtual,但在省略接口名之后允许。
使用显示接口实现,方法不应有一个访问修饰符。用于实现一个接口的所有方法都具有public可访问性。
本书的建议尽可能显示实现接口
《visual C#2005从入门到精通》p166 显示接口的优点。

是啊,没错,现在就是不知道为什么使用显示接口实现来定义的一个方法不能声明为virtual,假如还有子类要重写这个方法,那不是做不到了吗..
gaoyingjun 2007-03-16
  • 打赏
  • 举报
回复
//显式调用接口
interface ISampleInterface
{void SampleMethod();}
class ImplementationClass : ISampleInterface
{
void ISampleInterface.SampleMethod()
{
System.Windows.Forms.MessageBox.Show("test");

}
static void Main()
{
ImplementationClass ic=new ImplementationClass();
ISampleInterface ii =ic;
ii.SampleMethod();
}
}
gaoyingjun 2007-03-16
  • 打赏
  • 举报
回复
TO:hbxtlhx(平民百姓)
"ISampleInterface.SampleMethod()",这样不是显式接口实现吗?MSDN里面都是这样描诉的.
void ISampleInterface.SampleMethod()
{
this.SampleMethod("test");

}
gaoyingjun 2007-03-16
  • 打赏
  • 举报
回复
接口包含的方法和成员默认且必须是public的!!
li_oxen 2007-03-16
  • 打赏
  • 举报
回复
d
北京的雾霾天 2007-03-16
  • 打赏
  • 举报
回复
接口的成员要么是Public的,要么就是隐式的(没有访问修饰符)

按你的类的代码来说,你不是“显式实现接口”,而是隐式实现的。所以没有public也是正常的。
effun 2007-03-16
  • 打赏
  • 举报
回复
//定义两个接口,有相同的方法
interface ISampleInterface
{
void SampleMethod();
}
interface ISampleInterface2
{
void SampleMethod();
}
//定义一个类实现接口,显式实现接口.
class ImplementationClass : ISampleInterface,ISampleInterface2
{
public void SmapleMethod(string msg)
{
System.Windows.Forms.MessageBox.Show(msg);
}

void ISampleInterface.SampleMethod()
{
this.SampleMethod("test");

}
void ISampleInterface2.SampleMethod()
{
this.SampleMethod("test2");

}

}
稍微有点无敌 2007-03-16
  • 打赏
  • 举报
回复
默认的情况下本来就是public的
sunrobust 2007-03-15
  • 打赏
  • 举报
回复
接口是不能设置的,接口包含的方法和成员呢?
连风 2007-03-15
  • 打赏
  • 举报
回复
sunrobust(咸鱼---翻身理想不灭)
说的不对。

定义接口时 是无法设置访问级别的,所有的接口默认(也只能是)public的。
Avoid 2007-03-15
  • 打赏
  • 举报
回复
为了消除歧异,同名接口函数访问限制是private的。只能通过全名访问ISampleInterface2.SampleMethod

在《.Net框架高级编程》一书中有详细的解释。
Zine_Alone 2007-03-15
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/TopicView3.asp?id=5392749
这个帖子说的很清楚,道理是一样的
sunrobust 2007-03-15
  • 打赏
  • 举报
回复
interface ISampleInterface
{
void SampleMethod();
}
interface ISampleInterface2
{
void SampleMethod();
}

你这两个接口里面的函数没有声明访问权限,C#默认为是private

所以在所有实现这两个接口的函数里面,都不能再声明为比private更开放的权限

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧