C/C++/C# Note
三种语言的相似之处有很多,先后学了
c++
c
c#
,把一些之前不知道的东西记录一下,写过很多遍的就不整理了。
变量
枚举类型
c++/c#
枚举 enum
是一种用户定义的类型,它由一组命名的整数常量组成。枚举类型的主要目的是提高代码的可读性和可维护性,特别是在处理一组相关的常量时。
示例
1 | enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN }; |
这里就定义了一个枚举类型 eDirection
,和这个类型的一个变量 dir
,它只可以取其中这些常量的值。
里面的值可以设定,默认是递增的。
访问即 dir.LEFT
,这样可以使代码更直观
库
conio.h
c++
_kbhit()
如果有键盘输入,则返回 1.
否则返回 0.
它是非阻塞的,这点与 _getch()
不同。
_getch()
从控制台中读取单个字符,不需要回车键。
且读取的字符不会在控制台中显示。
Class
c#
静态变量
关键字 static
。
每一个 class
都有它的变量、函数等。
对象是类的实例。
如果是 static
类型的变量,那么无需为这个 class
实例化(即创建一个对象)便可以修改它的值。
示例:
1 | public class Myclass { |
访问修饰符
public
修饰类时,代表它可以被任何文件的任何代码访问。
修饰成员时,表示这个对象可以在任何位置被访问。
private
只能修饰成员,表示这个变量只可以在对象内部被访问。
internal
类或成员只能被一个程序集中的代码访问,类的默认修饰符。
protected
子类可以访问,而外部不可访问。
Class 与 Struct
它们的区别在何处?
class
变量储存的是地址,而 sruct
变量储存的是值。
也就是说,如果将一个 class
赋值给另一个 class
,那么这两个 class
所指向的是相同的变量。
而如果把一个 struct
赋值给另一个 struct
,那么这两个 struct
是两个值相同的不同的变量。
同样,当 class
作为形参传入一个函数时,它的值会受到函数内修改的影响,因为访问的都是同一个地址。
而 struct
作为值只是复制了一份传入函数,函数内修改的是复制体,并不会影响到外面的值。
对 struct
使用 ref
关键字,即取地址,即可实现和 class
一样的效果。
struct
不能继承 struct
或者 class
,无法被继承,只能继承接口。
class
可以继承一个父类,也可以继承接口。
继承
public class A : B
表示类 A 继承类B,A 是子类,B 是父类,子类可以使用父类中的变量。
而如果子类中某个函数不想使用父类中的函数,可以采用 override
关键字重新定义这个函数。
1 | public override void fn() { |
同时需要在父类的这个函数中添加 virtual
关键字表示这个函数允许被重写。
1 | protected virtual void fn() { |
需要注意,父类变量可以存储子类变量的值,但子类变量不可以存储父类变量的值。
所有类型的基类是 object
。
Partial
在类前加上此关键字可以在各个文件中写这个类,并且它们最终会合并在一起。
1 | public partial class p { |
接口
在类前加上 interface
便可以作为一个接口。
接口内定义若干方法,而不定义它们的实现,且不能添加访问修饰符,默认 public
。
接口只提供声明,不提供实现。
所以继承接口后需要给出它相应的实现。
Abstract
添加 abstract
的类无法被实例化,并且可以暂时不实现接口。
abstract
也可以修饰函数,只声明不实现,留给子类实现。
抽象类中可以实现接口。
类只能继承一个抽象类。
抽象类也可以自己声明函数、属性并实现。
泛型
1 | public class GV<T> { |
这样就可以实现同一份代码的不同类型。
泛型方法:
1 | public void Attack<T>(T a, T b) where T : Actor{ |
需要说明这个泛型继承自哪个类,否则默认就是 object
。
函数
函数指针
使用 delegate
声明一个类型,它可以储存多个相同形式的函数并依次执行,通过 +=
和 -=
控制里面的函数。
包括这个函数的类型,形参等。
1 | delegate float CalcFn(float v1, float v2); |
相当于一个函数集合。
Func<T1, T2, TResult>
表示一个委托类型,前面几个是输入参数的类型,最后一个是返回值的类型。
Action<T1, T2>
是无返回值
- Title: C/C++/C# Note
- Author: Falling_Sakura
- Created at : 2024-06-05 21:00:00
- Updated at : 2024-11-21 10:44:39
- Link: https://vercel.fallingsakura.top/edeb27c6.html
- License: This work is licensed under CC BY-NC-SA 4.0.