12388人加入学习
(21人评价)
C#编程-第二季-面向对象-宇宙最简单2021最新版

制作完成于2021-10月20日 使用VS2019

价格 免费

Equals() 继承自object

 

int 比较数值

string比较静态存储区

类比较引用

 

类里面重写Equals,比较类里面的值

 

强制类型转换:(类型名字)类

[展开全文]

使用Equals()来判断两个变量是否相同(高级版的==)

Array.Sort()方法可以进行排序

[展开全文]

系统自带的list,如果超出范围后,会进行预处理的报错

 

throw 抛出异常,new,System.ArgumentOutOfRangeExcption("报错信息");

如果命名空间已有了System,则不需要加System

 

IndexOutOfRangeException

ArgumentOutOfRangeException

 

  • 修复 IndexOutOfRangeException:检查循环边界和集合访问逻辑。

  • 使用 ArgumentOutOfRangeException:在公共方法中验证参数,明确约束(如 if (param < 0) throw ...)。

  • 集合访问差异List<T> 的索引器会抛出 ArgumentOutOfRangeException(手动验证),而数组会抛出 IndexOutOfRangeException(自动抛出)。

[展开全文]

泛型方法使用方式类似

1、创建方法的时候加上T

public static int GetSum<T>(T a,T b){};

2、使用方法的时候指定类型

GetSum<int>(23,45);

[展开全文]

如果是writeline一个类,或者让一个类tostring,则会打印出这个类的命名空间等信息

可以在类中重写tostring的方式,来让这个函数输出类中的变量的(因为tostring是object的类,而object是所有类的基类

[展开全文]

泛型:泛型类、泛型方法

处理不同数据类型

 

使用方法:

1、在创建类的时候,使用 T来代替各种类型(例如:int、string、double等等)

class ClassA<T>{ };

2、将类中声明的变量改成T(可以是任意类型)

3、实例化的时候,指定一个类型,后面的执行就会使用这个类型来进行处理

ClassA<int> a = new ClassA<int>();

 

注意:课程中的例子,将两个参数相加,但实际上T类型的无法相加,所以通过转换成dynamic来处理

[展开全文]

for循环

foreach遍历

 

Console.WriteLine(列表名称);  可以直接输出当前的类型的命名空间泛型等信息

 

 

[展开全文]

列表内容有一个数组

随着往列表内添加内容,列表容量会自动扩增:0、4、8、16依次增加

把原有的数组销毁,新增一个新的数组放入(使用Array.Copy())

可以预先制定容量大小,避免重复的消耗和复制,节省性能消耗

使用Capacity来设置、获取容量

intList.Capacity = 10;

 

[展开全文]

集合类和数组的区别

 

引用集合类的命名空间system.Collections.Generic;

 

List<int> listName = new List<int>(){ 放初始值 };

<> 泛型类

 

使用方法和数组类似

内置Count变量(计数器)

 

for 循环进行遍历

[展开全文]

接口中的方法一定是public

 

结构体放置在栈中

类实例放在堆中

[展开全文]

先执行父类的构造函数,再执行子类的构造函数

[展开全文]

接口中不能包含函数体,即使是空的函数体也不行。

 

子类中用new,隐藏方法:原来父类中的方法还在。

虚函数override了之后,原来父类中的方法不存在了。

[展开全文]

接口的继承
使用率不太高
A接口继承B接口,A接口拥有A和B的接口功能

一个类可以实现多个接口,用,分开

[展开全文]

接口
也是一种类,只包含没有实现的方法,没有数据成员
不能有构造函数,没有字段,无法进行运算符重载
接口的所有方法都是pubilc

interface  建议取名前面加I,例如IPort

继承接口类(准确来说是实现接口),必须重写接口中所有的方法

相当于USB接口,不实现任何功能,但可以插入各种功能

添加新项-接口

直接点击小灯泡可以自动帮忙实现接口

 

只能继承单个类,但可以实现多个接口

 

直接创建接口变量

面向接口编程

 

接口可以直接声明一个对象。

用这个对象可以创建的多个实例。

这个对象创建的实例,这些实例都可以实现接口的功能。

以上的说法不太准确,应该是:

1、接口可以声明为变量类型,这个变量可以引用实现了该接口的类的实例

2、接口实现方式:定义接口-创建实现类(可以是多个)-实例化具体类(new)-通过接口变量来实现类

 

实现多态

用接口变量来调用任意一个实例

为什么不知道具体实例?

  1. 抽象隔离原则
    接口的设计目的就是隐藏具体实现细节,只暴露契约(方法签名)。调用方只需知道"这个对象能飞行",而不需关心是飞机还是鸟。

  2. 运行时绑定
    具体调用哪个实现,是在运行时动态决定的(根据当前引用的对象类型)。编译时只检查接口契约是否满足。

[展开全文]

static 静态修饰符

静态变量(数据成员)
类中存在静态变量,则在各个类中内共享,存储在静态存储区中(被多个类共享,全局)
只能通过类名来访问,无法通过实例引用访问(C#和JAVA的不同)
静态函数能够调用静态变量,不能访问动态变量

静态类
只能使用静态成员(方法和数据)
无法被实例化(直接调用)
无法被继承
不能声明构造函数(可以静态构造函数)

[展开全文]

new
abstract 和override一起使用
sealed(必须和override)
static 修饰类或数据成员
const 常量(必须初始化)
readonly(初始化或构造函数里赋值,后面无法修改)
virtual 虚方法,和override一起使用

abstract和virtual:必须强制实现、允许覆盖

[展开全文]

internal和public,是否可以在同一个程序集(项目)内访问

类的public(默认不是),实现项目之间的共享,右键“添加项目引用”(选取其他项目,并且会自动添加依赖项)
using 命名空间;

子类的访问权限不能比父类高

[展开全文]

先调用父类中的构造函数,再调用子类中的构造函数

public DrivedClass():base(){}

如果重载了构造函数

 

构造函数时候,可以使用冒号,将子类传入的参数传入父类的参数中。

传递到父类构造函数的参数不会自动赋值给子类,子类需单独处理自己的参数。

[展开全文]

授课教师

问问题加入A计划,有专门负责答疑的老师哦!!!

课程特色

下载资料(1)
视频(60)