C# 一些基础特性

C# 类别

class 定义的类型是参考型别, 在运行时当你声明一个参考类别变数, 此变数会包含 null, 直到使用 new 运算符建立这个类的实例, 或者将一个兼容类型的物件指向此变数, 建立物件时, 会在受管理的 heap 为该物件分配足够的记忆体, 而该变数只保存对这个物件位置的参考, 在受管理 heap 的类型配置时和被 CLR 的自动记忆体管理(也称垃圾回收 garbage collection)功能都需要开销, 然而记忆体管理也以获得高度最佳化, 在大部分情况下并不会产生效能问题.
使用关键字 class 宣告类别, 後面接着唯一识别码

// [access modifier] - [class] - [identifier]
// access modifier 代表存取层级
public class User
{
  // 
}

建立物件
使用关键字 new 来建立物件

User person1 = new User();
// person 是基於 User 的物件的参考

类别继承
类别完全支持继承, 这是物件导向程序设计的基础特性, 当你建造一个类别时, 你可以从其他非定义为 sealed 的类别继承, 还可重写类别的方法, 另外可以实作一个或多个介面, 继承通过使用衍生完成, 这意味着一个类是通过使用他继承的资料和行为的基类来宣告, 通过附加冒号指定基类, 类别宣告基类时, 会继承基类的除了建构式(constructor)外所有成员, C# 中的类别只能直接继承自一个基类, 类别可实作一个或多个介面

public class Student : Person
{
}

抽象类别(abstract class)
可以宣告 抽象类别(abstract class), 一个抽象类别包含抽象方法有签章没有实作, 抽象类别无法实例化, 只能通过衍生类别来时作抽象方法
(密封类别)Sealed Class
在类别定义前面加上 sealed 关键字, 就可以将类别宣告为 sealed, 密封类别不能当基类被继承, 所以也不能是抽象类别.

参数(Parameters)

parameters 用於将值或变数参考传递给方法, 当方法被调用时从指定的引数(argument)得到参数的实际值,参数有4种: 实值参数(value parameters), 参考参数(reference parameter), 输出参数(output parameter), 参数阵列(parameter array)
一个实值参数被用来传递输入引数, 一个实值参数会对应至一个区域变数(local variable), 这个变数会从传递的引数取得初始值, 对参数修改不影响传入的引数
参考参数用参考方式传递引数, 传递给参考参数的引数必须有明确值的变数, 方法执行期间参考参数与引数变数相同储存位置, 使用 ref 修饰符来宣告参考参数

void swap(ref int x, ref int y)
{
  int temp = x;
  x = y;
  y = temp;
}

int i = 1, j = 2;
swap(ref i, ref j);
Console.WriteLine($"{i} {j}")

输出参数用参考方式传递引数, 类似参考参数, 不过不需要明确指定值给呼叫端的引数, 使用 out 修饰符宣告输出输出参数

class Program
{
  static void Add(int x, int y, out int sum)
  {
    sum = x + y;
  }
  
  static void Main(string[] args)
  {
    Add(5, 6, out int res);
    Console.WriteLine($"{res}");
  }
}

参数阵列允许将数量不固定的引数传递给方法, 使用 params 修饰符来宣告, 方法中只有最後一个参数可以是参数阵列, 阵列参数的型别必须是一维阵列型别, 例如 System.Console 的 Write 和 WriteLine 方法, 可以传递阵列类型的单一引数, 或任何个数的参数阵列的元素

int x, y, z;
x = 1;
y = 2;
z = 3;
Console.Write("x={0} y={1} z={2}", x, y, z);
object[] args = new object[3];
args[0] = x;
args[1] = y;
args[2] = z;
Console.Write("x={0} y={1} z={2}", args);

<<:  Day 04 - 开启第一个资料库与建立表单

>>:  Day3 建立React环境

JS 42 - 新增或删除表格式表单的资料列

大家好! 今天要实作新增和删除资料列。 我们进入今天的主题吧! 样式 .table { displa...

Day28 -- Click and Drag

目标 今天要做的是,拖拉然後卷动区块 Step1 const slider = document.q...

CSS Position

前言 position 是用来设置元素定位的属性 Position分成了static 、fixed、...

LeetCode 双刀流:24. Swap Nodes in Pairs

24. Swap Nodes in Pairs 前面我们着重在「资料结构」的议题上做了不少的讨论,...

Angular 深入浅出三十天:表单与测试 Day01 - 前言

何谓表单? 维基百科是这样说的: 表单是一种带有空格可用於书写以及能选择和勾选相似内容的文件。 表...