今天看接口与抽象类,越看越糊涂,看了很多例子也没看出接口有什么作用,感觉用了还麻烦.
//公共接口: "动物"
public Interface IAnimal
{
int EyeNumber;
private void Behavior(); //行为方法,描述各种动物的特性
} //类: 狗
public Dog : IAnimal
{
string ActiveTime = "白天";
private void Behavior()
{
Console.Write("我晚上睡觉,白天活动");
}
}//类: 猫
public Cat: IAnimal
{
string ActiveTime = "夜晚";
private void Behavior()
{
Console.Write("我白天睡觉,晚上活动");
}
} public Behavior(IAnimal myIanimal)
{
myIanimal.Behavior();
}
//简单的应用:
public static Main()
{
Dog myDog = new Dog();
myDog.Behavior(); //输出: "我晚上睡觉,白天活动"
Cat myCat = new Cat();
myCat.Behavior(); //输出: "我白天睡觉,晚上活动"
} Dog myDog = new Dog();
Cat myCat = new Cat();
Behavior(myDog); //Behavior接受“狗”类实例
Behavior(myCat); //Behavior接受“狗”类实例 这样Behavior方法写一次就能完成所有继承它的类中的相同名方法的不同功能. 非常方便我真没发现它哪里方便了,不用接口,直接创建类的实例,然后调用类中的方法不就行了?还有后面说的扩展性,说如果
加一种动物,用了接口就很方便了,我也没看出来用了接口为什么方便,就算不用接口,我再新建一个类(用了接口还是要新建的),再创建类的实例,调用类中的方法不就OK了??
//公共接口: "动物"
public Interface IAnimal
{
int EyeNumber;
private void Behavior(); //行为方法,描述各种动物的特性
} //类: 狗
public Dog : IAnimal
{
string ActiveTime = "白天";
private void Behavior()
{
Console.Write("我晚上睡觉,白天活动");
}
}//类: 猫
public Cat: IAnimal
{
string ActiveTime = "夜晚";
private void Behavior()
{
Console.Write("我白天睡觉,晚上活动");
}
} public Behavior(IAnimal myIanimal)
{
myIanimal.Behavior();
}
//简单的应用:
public static Main()
{
Dog myDog = new Dog();
myDog.Behavior(); //输出: "我晚上睡觉,白天活动"
Cat myCat = new Cat();
myCat.Behavior(); //输出: "我白天睡觉,晚上活动"
} Dog myDog = new Dog();
Cat myCat = new Cat();
Behavior(myDog); //Behavior接受“狗”类实例
Behavior(myCat); //Behavior接受“狗”类实例 这样Behavior方法写一次就能完成所有继承它的类中的相同名方法的不同功能. 非常方便我真没发现它哪里方便了,不用接口,直接创建类的实例,然后调用类中的方法不就行了?还有后面说的扩展性,说如果
加一种动物,用了接口就很方便了,我也没看出来用了接口为什么方便,就算不用接口,我再新建一个类(用了接口还是要新建的),再创建类的实例,调用类中的方法不就OK了??
解决方案 »
- c# 结构中如何定义数组
- 求试卷出题算法
- qq会弹出新闻对话框,如何修改注册表,让它新闻连接打开的浏览器是自己定义的浏览器?
- C#中如何绑定控件实例
- 如何封闭DLL中的方法,使其对外不可见
- c# 我使用了多个子窗口 show(this)后 所有Strip的控件的第一次点击激活,然后才能显示其下拉菜单
- developer Express XtraGrid控件滚动条问题
- 我有一个主机空间 想组建网站不知道该如何操作 送给您六十分)
- 关于winform搜索窗体子控件的问题
- RichTextBox如何使得ScorllBar一直在最下方?
- web网页数据插入数据库的问题,会产生死锁之类的么。
- 如何得到image的width, height 可是不把image load到内存
用接口,每种Animal都只要写自己不同的特性部分的代码。
不用接口,每种Animal都必须加上这一万行代码。
用你的代码修改了一下
public Interface IAnimal
{
int EyeNumber;
private void Behavior(); //行为方法,描述各种动物的特性
} //类: 狗
public Dog : IAnimal
{
string ActiveTime = "白天";
private void Behavior()
{
Console.Write("我晚上睡觉,白天活动");
}
}//类: 猫
public Cat: IAnimal
{
string ActiveTime = "夜晚";
private void Behavior()
{
Console.Write("我白天睡觉,晚上活动");
}
} public Behavior(IAnimal myIanimal)
{
myIanimal.Behavior();
}
//简单的应用:
public static Main()
{
IAnimal myDog = new Dog();
IAnimal.Behavior(); //输出: "我晚上睡觉,白天活动"
IAnimal myCat = new Cat();
IAnimal.Behavior(); //输出: "我白天睡觉,晚上活动"
}
如上代码,通过接口实现了对Behavior方法的封装,这意味着我不需要去管实现了这个接口的其他的类的Behavior方法内部具体是怎么做,我只管用就可以
不对。接口最重要的功能之一就是多态,是实现工厂的基础。你去接触下reflect、泛型、设计模式与代码规范及约束,哪里没有接口的影子。仅一个IEnumerable<T>,几乎能在代码里完成一切集合对象的引用,更别提其它接口与泛型的组合的强大扩展性,各种变化,一言难以蔽之。