总目录
C# 语法总目录
C# 面向对象编程 三—接口/枚举类型/泛型
- 接口
- 1. 显示接口实现
- 2. 虚方法实现接口函数
- 枚举类型
- 泛型类型
- 1.协变/逆变
接口
接口和类区别在于,接口不用为成员函数提供实现,接口的成员都是隐式抽象的,而且接口不能有字段,可以有属性。
接口的方法默认是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;}}
1.协变/逆变
略。
总目录
C# 语法总目录