using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
/* 这个案例主要人任务是介绍。接口中方法的重写及覆盖的等方法,这里面涉及到几个关键字 *
<1>virtual 这个修饰符是很关键的修饰符,一般应用于基类中,方便与子类中的重写基覆盖
*/
public interface I_6_A
//定义一个接口,I_6_A 里面包含两个方法
{
string GetUrl();
string GetName();
}
public class I_6_L : I_6_A
//此处定义与一个类,并且对于基接口中的方法进行了描述。这个类作为以下类的基类
{
public virtual string GetUrl()
{
return "这个方法是在子类中是可以任意重写的";
}
public virtual string GetName()
{
return "这个方法同上";
}
}
//下面这个类就是对于上面类的继承,但有一个不同点就是同时继承了基类的接口。。因为本身里面的方法重写的方法不是这样
//所以这样必须的在继承与基类的同时,对于接口进行继承 但是这种方法是不改变任何基类中的任何方法的。。一般没什么意思
//* 这里面还要强调一个关键点就是当我们对于接口中的成员实现时不能使用任何修饰符 */
public class I_6_L_2 : I_6_L, I_6_A
{
string I_6_A.GetUrl()
{
return "www.baidu.com";
}
string I_6_A.GetName()
{
return "这个是对接口中的方法进行定义";
}
}
/* 下面这个方法同样的继承了I_6_L这个类。而且使用了override关键字I_6_L中的方法进行重写 * 这种方法个人理解,只是对原基类中的方法进行重写,而不会影响基类中的原函数。在我们调用.dll中有这种用法 */
public class I_6_L_3 : I_6_L
{
public override string GetUrl()
{
return "www.qq.com";
}
public override string GetName()
{
return "这是对于原函数的重写";
}
}
/* 下面这个类是很严重的,他不但继承了上面的类。而且对于基类中的方法进行了覆盖。。这里面用到了new的修饰符 */
public class I_6_L_4 : I_6_L
{
public new string GetUrl()
{
return "www.126.com";
}
public new string GetName()
{
return "这是对于基类中的方法进行覆盖";
}
}
下面是对上面的实例进行引用,
protected void Button1_Click(object sender, EventArgs e)
{
I_6_L l1 = new I_6_L();
Response.Write(l1.GetName() + ":" + l1.GetUrl());
I_6_L_2 L2 = new I_6_L_2();
Response.Write("<br/>"+L2 .GetName ()+":"+L2 .GetUrl ());
I_6_L_3 l3 = new I_6_L_3();
Response.Write("<br/>" + l3 .GetName() + ":" + l3 .GetUrl());
I_6_L_4 l4 = new I_6_L_4();
Response.Write("<br/>" + l4.GetName() + ":" + l4.GetUrl());
}
下面是输出结果:
这个方法同上:这个方法是在子类中是可以任意重写的 这个方法同上:这个方法是在子类中是可以任意重写的 这是对于原函数的重写:www.qq.com 这是对于基类中的方法进行覆盖:www.126.com
上面的方法中方法一没有对基类中方法进行重写,所以没有改变任何值。。只是一个实例
这