首页 新闻 会员 周边

对接口所定义的方法的实现必须是public的吗?

0
悬赏园豆:20 [已解决问题] 解决于 2009-11-04 16:51

按照我的理解,接口是面向使用者的,所以它定义的方法必须是public的,比如:

Code
interface IMyInterface
{
string GetName();
}

如果在string GetName()前面加任何修饰符如protected, private都会报错。所以,在实现上述接口时,类的方法也理所当然应该是public的:

Code
class SCD:IMyInterface
{
public string GetName()
{
return "John";
}
}

这里我若去掉public或换成private,protected都会报错。

但我发现在某些系统类中,却不是这样的,比如用来维护页面ViewState的StateBag类 (位于System.Web.UI 空间下),其定义是:

Code
public sealed class StateBag : IStateManager, IDictionary, ICollection, IEnumerable

它实现了一个叫IStateManager的接口,而这个接口的定义是:

Code
public interface IStateManager
{
bool IsTrackingViewState { get; }
void LoadViewState(object state);
object SaveViewState();
void TrackViewState();
}
可是在StateBag类中按F12查找定义,或是用Reflector查看源码,发现对IStateManager的所有方法的实现都不是public的 而是没有修饰符,也就是默认private的:

Code
void IStateManager.LoadViewState(object state);
object IStateManager.SaveViewState();
void IStateManager.TrackViewState();
而且在StateBag类的外面也确实不能调用它们,这究竟是什么原因呢,难道.net Framework 对基本类库的处理有另外的一套机制吗?请知道的朋友帮忙解释一下!

 

破碎了无痕的主页 破碎了无痕 | 菜鸟二级 | 园豆:218
提问于:2009-10-29 14:19
< >
分享
最佳答案
1

接口的显示实现嘛,你把类型转换成接口,自然就可以调用这些方法了。

收获园豆:20
麒麟.NET | 老鸟四级 |园豆:3614 | 2009-10-29 16:11
其他回答(2)
0

接口的方法并不一定是punlic型哦,它是一个约束声明,所有继承这个接口的类都必须实现接口里的方法,无论方法是什么类型的都需要实现,

shanechow | 园豆:185 (初学一级) | 2009-10-29 14:36
1

接口声明默认都是public的

邢少 | 园豆:10926 (专家六级) | 2009-10-29 16:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册