接口
接口和类区别在于,接口不用为成员函数提供实现,接口的成员都是隐式抽象的,而且接口不能有字段,可以有属性。
接口的方法默认是public
类可以实现多个接口,而只能继承自一个类,结构体完全不支持继承,支持实现接口。
结构体可以继承接口,实现它的属性和方法。
internal interface Iperson
{
void Test();
int Name {
get; set; }
}
public struct Point : Iperson
{
public int Name {
get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
public void Test()
{
throw new NotImplementedException();
}
}
1. 显示接口实现
显示接口就是继承多个接口的时候,如果这两个接口有同名的方法,那么实现这两个方法的时候要显示的实现,就是在实现的方法前加上不同接口名字的前缀
2. 虚方法实现接口函数
可以在实现的接口函数前面加上virtual,让它变成一个虚函数,可以让它的子类重写它。
枚举类型
成员默认对应的值是int的,可以实现byte或其他类型去改变默认类型
枚举类型一般可以合并,所以让值为2的倍数可以避免混淆
如果给枚举类型添加上标签,那么这个类型可以合并,当然不添加也能合并,但是添加后输出时是分开的类型名,不添加时输出是合并后的一个数字
[Flags]
public enum AnimalType : byte
{
None = 0,
Bird = 1,
Dog = 2,
Cat = 4,
Pig = 8,
BirdDog = Bird | Dog,
BirdCat = Bird | Cat
}
static void Main(string[] args)
{
AnimalType type = AnimalType.Bird;
//合并
type |= AnimalType.Dog;
Console.WriteLine(type);
}
//输出,因为有 Flags 标签,没有的话会输出 3
Bird, Dog
泛型类型
指定类中的某些成员是某类类型
public class Dog<T>
{
string? name;
T? age;
public Dog(T a)
{
name = "abc";
age = a;
}
}