C# 面向对象编程(三)——接口/枚举类型/泛型

简介: C# 面向对象编程(三)——接口/枚举类型/泛型

接口

接口和类区别在于,接口不用为成员函数提供实现,接口的成员都是隐式抽象的,而且接口不能有字段,可以有属性。

接口的方法默认是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;
    }

}
目录
相关文章
|
5月前
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
193 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
5月前
|
C#
C#数据类型之枚举类型
C#数据类型之枚举类型
|
5月前
|
IDE C# 开发工具
C#系列之接口介绍
C#系列之接口介绍
|
5月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
14天前
|
C#
C# 接口(Interface)
接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分。 接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。 接口使得实现接口的类或结构在形式上保持一致。 抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。 接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。 抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。
42 9
|
26天前
|
安全 C#
C# 面向对象编程的三大支柱:封装、继承与多态
【9月更文挑战第17天】在C#中,面向对象编程的三大支柱——封装、继承与多态,对于编写安全、可维护、可复用的代码至关重要。封装通过访问修饰符和属性保护数据;继承允许子类继承父类的属性和方法,实现代码复用和多态;多态则提高了代码的灵活性和通用性。掌握这三大概念能显著提升C#编程能力,优化开发效率和代码质量。
|
1月前
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
49 11
|
1月前
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
76 5
|
2月前
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
54 4
|
2月前
|
API C# 数据库
SemanticKernel/C#:实现接口,接入本地嵌入模型
SemanticKernel/C#:实现接口,接入本地嵌入模型
64 1