110,533
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 接口
/// </summary>
public interface ITest
{
void Test();
}
/// <summary>
/// 基类, 实现了 ITest 接口
/// </summary>
public class clsBase : ITest
{
public void Test()
{
Console.WriteLine("Base's Test!");
}
}
/// <summary>
/// 派生类
/// </summary>
public class clsDerive : clsBase, ITest
{
//此时编译时会报一个“Test.clsDerive.Test()' hides inherited member 'Test.clsBase.Test()'”编译器警告
//这个是正常的
public void Test()
{
Console.WriteLine("Derive's Test!");
base.Test();
}
}
//测试代码
{
ITest cls = new clsDerive();
cls.Test();
//此时居然打印出“Derive's Test!”, 也就是调用的是派生类的方法
//这个我是不能理解的,应该调用基类的方法才对, 因为派生类的 Test 隐藏了基类的方法
//但如果 clsDerive 类不从 ITest 接口继承, 即这样申明
public class clsDerive : clsBase //,ITest
//则结果是正常的, 打印出“Base's Test!”
//为什么会有这两种结果?
}
ITest cls = new clsDerive();
cls.Test();
ITest cls = new clsDerive();
((clsBase))cls.Test();
/// <summary>
/// 派生类
/// </summary>
public class clsDerive : clsBase, ITest
{
//此时编译时会报一个“Test.clsDerive.Test()' hides inherited member 'Test.clsBase.Test()'”编译器警告
//这个是正常的
public void Test()
{
Console.WriteLine("Derive's Test!");
//base.Test(); //这一行是多余的, 忘了去掉了
}
}
public class clsDerive : clsBase , ITest
{
public new void Test()
{
Console.WriteLine("Derive's Test!");
base.Test();
}
#region ITest 成员
void ITest.Test()
{
Console.WriteLine("Derive's Test!"); ;
}
#endregion
}
ITest cls = new clsDerive();
cls.Test();
public new void Test()
{
Console.WriteLine("Derive's Test!");
base.Test();
}