interface Iname
{
void GetName();
}
public class a:Iname
{
public virtual void GetName()
{
Console.WriteLine("this is a");
}
}
public class b:a
{
public override void GetName()
{
Console.WriteLine("this is b");
}
}
请问我这样写算是实现接口了么?
解决方案 »
- c# winform窗体关闭进程问题
- 单独安装.NET3.0或3.5的时候速度很慢?
- 急急急!!!!!!!如何在登陆成功后把用户名写进profile 救命啊
- 建议楼主封utyeertdsf123() 的id,看了一下午他的广告!
- 不是问题的问题
- 求助:C#处理注册表 像regedit一样
- 有没有大侠做过sqlserver导成access文件?帮帮小D啊,急
- tostring的问题
- json反序列化为什么没有XmlArray和XmlArrayItem功能
- ADO.NET中的DataSet或DataTable对象是否有方法把捞出的数据转换成字符串?就像ado 2.6中的Recordset.GetString()方法。
- C#如何获得某程序的路径
- 绑定ComboBox控件后更改其值
a实现了接口中定义的方法,b继承了a并且重载了这个方法。
{
void GetName();
}
public class a : Iname
{
public virtual void GetName()
{
Console.WriteLine("this is a");
}
}
public class b : a
{
public override void GetName()
{
Console.WriteLine("this is b");
}
}public class Test
{ public static void Main()
{
Iname i1 = new a();
i1.GetName();
Iname i2 = new b();
i2.GetName();
}
}
interface Iname
{
void GetName();
}
public class a:Iname
{
void Iname.GetName()
{
Console.WriteLine("this is a");
}
public virtual void GetName()
{
Iname n = this;
n.GetName();
}
}
public class b:a
{
public override void GetName()
{
Console.WriteLine("this is b");
}
}
Iname n = new b();
n.GetName(); //this is a
//如果改成
public class b:a, Iname
{
public override void GetName()
{
Console.WriteLine("this is b");
}
}
Iname n = new b();
n.GetName(); //this is b
既然第一种情况下b已经实现接口了,
那public class b:a, Iname和public class b:a又有什么不同呢?
7楼的代码中 class a中的2个方法
void Iname.GetName() 和 public virtual void GetName()
是什么关系呢??
interface Iname
{
void GetName();
}
public class a:Iname
{
public void GetName()
{
Iname n = this;
n.GetName();Console.WriteLine("this is a");
}
}
public class b:a
{
public void GetName()
{
Console.WriteLine("this is b");
}
}
Iname n = new b();
n.GetName(); //this is a
//如果改成
public class b:a, Iname
{
public override void GetName()
{
Console.WriteLine("this is b");
}
}
Iname n = new b();
n.GetName(); //this is b是我对现实,隐式实现的解释误导了你。应该这么说a实现了Iname的接口以后如果GetName不使用virtual修饰,那么b的GetName()是不会被调用了,如果想被调用要么a使用virtual修饰,要么b再继承Iname接口
public class b:a, Iname
{
public void GetName()
{
Console.WriteLine("this is b");
}
}
Iname n = new b();
n.GetName(); //this is b显示实现接口实际上是为了封装性,比如你的接口Iname是在一个业务处理dll里并且不是public的,a是在另一个dll里比如在UI项目里,如果你在a里面显示实现GetName方法目的就是为了不想让UI项目里的其他类调用,而只有把a对象传回到业务处理的dll中时才能被使用
interface ISession
{
object GetValue(string name);
}
然后WebSession和WinSession对它分别进行显示实现,这样可以组织UI层直接使用Session数据造成混乱。