php投票网站,seo短视频网页入口引流在线,学校网站建设申请,大学生创新项目申报书 做网站目录
1. 定义
2. 接口的特点与规则
3. 接口的实现
3.1单接口实现
3.2多接口实现
4. 接口的作用和用途
1)扩展行为
2)规范行为
3)降低耦合
5. 接口与继承的比较
1)继承
2)接口
6. 接口与抽象类的比较
1)IComparable(比较器#xff0c;常用)
2)IComparer(比较器)…目录
1. 定义
2. 接口的特点与规则
3. 接口的实现
3.1单接口实现
3.2多接口实现
4. 接口的作用和用途
1)扩展行为
2)规范行为
3)降低耦合
5. 接口与继承的比较
1)继承
2)接口
6. 接口与抽象类的比较
1)IComparable(比较器常用)
2)IComparer(比较器)
3)IEnumerable(枚举器常用)
4)IEnumerator(枚举器) 本篇文章来分享一下C#的接口。从接口的定义、特点与规则、接口的实现、接口与继承的比较、接口与抽象类的比较等来详细学习接口。
1. 定义 在C#中接口interface是用来定义类或结构struct所实现的一组公共行为的抽象。接口本质上定义了行为规范但不实现行为。接口中的所有成员都是抽象的它们只声明不实现所有成员默认是public不能有字段也不能有实现代码。接口名建议用”I”开头其后单词首字母大写 如IFlyableIDriveable
public interface IFlyable
{void Fly();//接口中的方法默认是抽象的
} 简而言之接口是规范定义一组对外的行为规范要求它的实现类必须实现接口的所有成员。其中实现接口的方法不能加override。 2. 接口的特点与规则
1)接口中不能包含字段接口只能包含方法、属性、索引器和事件不能包含任何字段。 2)所有成员默认是public接口中的方法、属性、事件等成员默认是public不能显式指定访问修饰符。接口的成员不能有访问修饰符也不能使用abstract关键字。
public interface IDriveable
{void Drive();//无需使用abstract默认即为抽象方法
}
3)接口中只能定义抽象成员接口的所有成员默认都是抽象的因此不需要再使用abstract关键字显式声明。 4)接口不能实例化接口无法直接创建实例必须通过实现接口的类或结构来创建对象。如接口 iObjnew 实现类(); 3. 接口的实现
3.1单接口实现 实现接口时类必须实现接口中的所有成员否则该类会被标记为抽象类。
public class Car : IDriveable
{public void Drive(){Console.WriteLine(Driving...);}
} 3.2多接口实现 C#允许类实现多个接口接口之间的多继承是允许的。实现类必须实现接口中的所有成员。包括隐式实现与显式实现。
1隐式实现最常见的实现方式直接实现接口中的成员默认是public。 2显式实现通过接口名称显式实现接口成员且这些成员在实现类中是private的只有通过接口类型的引用才能调用。
//隐式实现
public class Car : IDriveable, IFlyable
{public void Drive() Console.WriteLine(Driving...);public void Fly() Console.WriteLine(Flying...);
}
//显式实现
public class Car : IDriveable, IFlyable
{void IDriveable.Drive() Console.WriteLine(Driving...);void IFlyable.Fly() Console.WriteLine(Flying...);
} 被称为表达式主体运算符是一种简洁的语法用于将方法、属性、索引器等成员的实现压缩为单行代码适用于那些仅包含单一表达式的成员。 4. 接口的作用和用途
1)扩展行为 接口允许你在不改变已有类的情况下扩展类的功能。例如假设有一个Car类它没有飞行功能但我们可以通过实现IFlyable接口给Car类增加飞行的功能而不必直接修改原类。
2)规范行为 接口允许我们定义一组行为的规范使得不同类在行为上保持一致。例如不同种类的交通工具汽车、飞机、船只等都可以实现IDriveable接口这样我们可以用统一的方式对不同的交通工具进行操作。
3)降低耦合 接口允许代码与实现细节解耦增强代码的可扩展性和可维护性。使用接口可以降低类与类之间的直接依赖便于未来的扩展和修改。 5. 接口与继承的比较
1)继承
①类继承只能支持单一继承。一个类只能继承自一个父类。 ②类继承是继承父类的具体实现并可能重写某些方法。
//父类基类
public class Animal
{public string Name { get; set; }//父类方法public void Eat(){Console.WriteLine(${Name} is eating.);}//虚方法允许子类重写public virtual void Speak(){Console.WriteLine(${Name} makes a sound.);}
}//子类派生类
public class Dog : Animal
{public string Breed { get; set; }//重写父类方法public override void Speak(){Console.WriteLine(${Name} barks.);}
}public class Program
{public static void Main(){Dog dog new Dog { Name Buddy, Breed Golden Retriever };dog.Eat();//继承自父类的方法输出Buddy is eating.dog.Speak();//重写后的方法输出Buddy is eating.}
}
2)接口
①接口支持多继承一个类可以实现多个接口。 ②接口只定义行为规范不关心实现细节避免了类之间紧耦合。
public interface IAnimal
{void Eat();void Sleep();
}
public interface ISwimmable
{void Swim();
}//类实现多个接口
public class Duck : IAnimal, ISwimmable
{public void Eat(){Console.WriteLine(Duck is eating.);}public void Sleep(){Console.WriteLine(Duck is sleeping.);}public void Swim(){Console.WriteLine(Duck is swimming.);}
}public class Program
{public static void Main(){Duck duck new Duck();duck.Eat();//实现自 IAnimal 接口输出Duck is eating.duck.Sleep();//实现自 IAnimal 接口输出Duck is sleeping.duck.Swim();//实现自 ISwimmable 接口输出Duck is swimming.}
}
特性继承Class接口Interface继承结构单继承一个类只能继承自一个父类支持多继承一个类可以实现多个接口实现细节继承父类的实现子类可以重写父类的方法只定义行为规范不关心实现细节使用场景用于描述类之间的“是一个”关系例如狗是动物用于定义不同类可以共享的行为例如可游泳的动物访问修饰符可以使用访问修饰符public, private等所有成员默认是公共的public构造函数可以有构造函数接口不能有构造函数 总结 类与类只能单继承。 类与接口可以多实现一个类可以实现多个接口。 接口与接口可以多继承一个接口可以继承多个接口。 6. 接口与抽象类的比较 1)接口当需要定义一个行为的规范并允许多个类实现该行为时使用接口。例如IDriveable接口可以被多个类如Car、Truck实现。
//定义接口 IDriveable
public interface IDriveable
{void Drive(); // 接口方法只定义行为的规范不提供实现
}//类 Car 实现 IDriveable 接口
public class Car : IDriveable
{public void Drive(){Console.WriteLine(The car is driving.);}
}//类 Truck 实现 IDriveable 接口
public class Truck : IDriveable
{public void Drive(){Console.WriteLine(The truck is driving.);}
}public class Program
{public static void Main(){IDriveable car new Car();car.Drive();//调用 Car 类中的 Drive 方法输出The car is driving.IDriveable truck new Truck();truck.Drive();//调用 Truck 类中的 Drive 方法输出The truck is driving.}
}
2)抽象类当希望定义一些通用的行为并允许一些方法在子类中被重写时使用抽象类。例如Animal类可以是抽象类包含一些通用的行为如Eat方法同时定义一些抽象方法如MakeSound方法。
//定义抽象类 Animal
public abstract class Animal
{//已实现的通用方法public void Eat(){Console.WriteLine(The animal is eating.);}//抽象方法要求子类实现public abstract void MakeSound();
}//类 Dog 继承 Animal并实现 MakeSound 方法
public class Dog : Animal
{public override void MakeSound(){Console.WriteLine(Dog Wangwang.);}
}//类 Cat 继承 Animal并实现 MakeSound 方法
public class Cat : Animal
{public override void MakeSound(){Console.WriteLine(Cat MiaoMiao.);}
}public class Program
{public static void Main(){Animal dog new Dog();dog.Eat();//调用父类 Animal 中的 Eat 方法输出The animal is eating.dog.MakeSound();//调用子类 Dog 中的 MakeSound 方法输出Dog Wangwang.Animal cat new Cat();cat.Eat();//调用父类 Animal 中的 Eat 方法输出The animal is eating.cat.MakeSound();//调用子类 Cat 中的 MakeSound 方法输出Cat MiaoMiao.}
}
特性接口Interface抽象类Abstract Class 成员实现 不能包含实现所有成员默认为抽象的 可以包含实现和抽象方法 字段不能包含字段可以包含字段多继承支持一个类可以实现多个接口不支持多继承一个类只能继承一个抽象类方法实现接口的方法只能声明不能提供实现抽象类可以有部分实现也可以有抽象方法构造函数接口不能有构造函数抽象类可以有构造函数访问修饰符接口成员默认是 public不能使用其他访问修饰符抽象类可以定义不同的访问修饰符使用场景用于定义一组行为规范多个类可以实现这些行为用于定义类的通用行为允许部分实现并强制子类实现抽象方法 简而言之接口更多用于行为的抽象而抽象类则更多用于功能的抽象和实现。想要更详细了解继承和抽象类的有关知识可以参考【超详细】C#基础-面向对象三大特性封装、继承 7. 接口在C#中的应用 C#中有很多常用的接口帮助我们统一不同类的行为。以下是一些常见的接口
1)IComparable(比较器常用) 类内继承通过实现CompareTo方法来自定义对象的比较规则用于比较对象的大小。
2)IComparer(比较器) 比较器继承通过实现Compare方法自定义两个对象的比较规则常用于排序比较。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace InterfacePro
{//调用端class Program{static void Main(string[] args){Student zs new Student{Id 1001,Age 19,Weight 140};Student ls new Student{Id 1002,Age 18,Weight 160};//写法1自定义对象的比较int a zs.Age.CompareTo(ls.Age);//写法2一般做法自定义的类只选择一个属性去比较实现比较接口IComparableint b zs.CompareTo(ls);//写法3基于写法2如果还要比较其他属性因为要遵守开闭原则此时要实现另一个比较器WeightCompare weightCom new WeightCompare();int c weightCom.Compare(zs,ls);}}//定义端 复用class Student:IComparable{public int Id { get; set; }public int Age { get; set; }public int Weight { get; set; }public int CompareTo(object obj){return this.Id.CompareTo((obj as Student).Id);}}class WeightCompare : IComparer{public int Compare(object x, object y){return (x as Student).Weight.CompareTo((y as Student).Weight) ;}}
} 3)IEnumerable(枚举器常用) 通过实现GetEnumerator方法返回一个迭代器IEnumerator使类型支持简单迭代(foreach)。
4)IEnumerator(枚举器) 本质是一组yield return的语句通过MoveNext进行逐段访问自己可以控制迭代的节奏。
public class MyCollection : IEnumerable
{private int[] items { 1, 2, 3 };public IEnumerator GetEnumerator(){foreach (var item in items){yield return item;}}
} 好了本次的分享到这里就结束啦希望对你有所帮助~