按照我的理解,接口是面向使用者的,所以它定义的方法必须是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();
}
Code
void IStateManager.LoadViewState(object state);
object IStateManager.SaveViewState();
void IStateManager.TrackViewState();
接口的显示实现嘛,你把类型转换成接口,自然就可以调用这些方法了。
接口的方法并不一定是punlic型哦,它是一个约束声明,所有继承这个接口的类都必须实现接口里的方法,无论方法是什么类型的都需要实现,
接口声明默认都是public的