c#笔记
枚举
枚举可以是任何数字数据类型,例如 byte,sbyte,short,ushort,int,uint,long 或 ulong。但是,枚举不能为字符串类型。
示例:字节枚举 (在 enum 名称后指定类型为:type。下面定义了字节 enum。)
enum Categories: byte
{
Electronics = 1,
Food = 5,
Fashion = 15
}
访问枚举使用点语法: enum.member 访问枚举
示例:访问枚举
enum WeekDays
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
Console.WriteLine(WeekDays.Monday); // 星期一
转换枚举
从枚举类型转换为其基础整数类型需要显式强制转换。
示例:枚举转换
Console.WriteLine(WeekDays.Friday); //输出:星期五
int day = (int) WeekDays.Friday; // 枚举到int的转换
Console.WriteLine(day); //输出:4
var wd = (WeekDays) 5; // 从int到枚举的转换
Console.WriteLine(wd);//输出:星期六
StringBuilder
对于字符串修改字符串对象将在新的内存地址创建一个新的字符串对象,而StringBuilder不在内存中创建新对象,而是动态扩展内存以容纳修改后的字符串。
创建一个StringBuilder对象
*示例:StringBuilder
using System.Text;
StringBuilder sb = new StringBuilder(); /
//或
StringBuilder sb = new StringBuilder("Hello World!");
StringBuilder sb = new StringBuilder(50); //稍后将追加字符串
//或
StringBuilder sb = new StringBuilder("Hello World!", 50);
StringBuilder 迭代
示例:
StringBuilder sb = new StringBuilder("Hello World!");
for(int i = 0; i < sb.Length; i++){
Console.Write(sb[i]); // 输出:Hello World!
}
向 StringBuilder 添加/追加字符串
sb.Append("Hello ");
sb.AppendLine("World!");
将格式化的字符串追加到 StringBuilder
StringBuilder sbAmout = new StringBuilder("您的总金额为 ");
sbAmout.AppendFormat("{0:C} ", 25);
Console.WriteLine(sbAmout);//输出:您的总金额为$25.00
将 String 插入 StringBuilder
StringBuilder sb = new StringBuilder("Hello World!");
sb.Insert(5," C#");
Console.WriteLine(sb); //输出:Hello C# World!
静态类
在类名之前和访问修饰符之后应用static修饰符,使类成为静态的。
静态类规则
静态类无法实例化。
静态类的所有成员必须是静态的。否则,编译器将给出错误。
静态类可以包含静态变量,静态方法,静态属性,静态运算符,静态事件和静态构造函数。
静态类不能包含实例成员和构造函数。
索引器和析构器不能是静态的
var不能用于定义静态成员。您必须在static关键字之后显式指定成员类型。
静态类是密封类,因此不能继承。
静态类不能从其他类继承。
可以使用 ClassName.MemberName(即:类名.成员名) 访问静态类成员。
静态类在程序所在的应用程序域的整个生命周期内都将保留在内存中。
静态构造函数
非静态类可以包含无参数静态构造函数。可以使用static关键字定义它,而没有访问修饰符。
静态构造函数规则
静态构造函数是使用 static 关键字定义的,没有使用访问修饰符 public,private 或 protected。
非静态类可以包含一个无参数的静态构造函数。不允许使用参数化的静态构造函数。
静态构造函数将在生命周期内仅执行一次。因此,如果在多个地方都使用了一个类,则无法确定何时在应用程序中调用它。
静态构造函数只能访问静态成员。它不能包含或访问实例成员。
有静态构造函数的类中,首次调用构造函数,先调用static构造函数,再调用普通构造函数。第二次再调用静态方法将不会调用静态构造函数。
C# 数组(Array)
数组声明和初始化
示例:数组声明
int[] evenNums; // 整数数组
string[] cities; // 字符串数组
int[] evenNums = { 2, 4, 6, 8, 10};
var evenNums = new int[]{ 2, 4, 6, 8, 10};
延迟初始化
int[] evenNums;
evenNums = new int[5];
// 或
evenNums = new int[]{ 2, 4, 6, 8, 10 };
将数组作为参数传递
public static void UpdateArray(int[] arr)
{
for(int i = 0; i < arr.Length; i++)
arr[i] = arr[i] + 10;
}
c#数组通过.Length语句可以推断数组长度
C# 索引器(Indexer)
示例:定义索引器
class StringDataStore
{
private string[] strArr = new string[10]; // 内部数据存储
public string this[int index]
{
get
{
if (index < 0 || index >= strArr.Length)
throw new IndexOutOfRangeException("Index out of range");
return strArr[index];
}
set
{
if (index < 0 || index >= strArr.Length)
throw new IndexOutOfRangeException("Index out of range");
strArr[index] = value;
}
}
}
示例:索引器
StringDataStore strStore = new StringDataStore();
strStore[0] = "One";
strStore[1] = "Two";
strStore[2] = "Three";
strStore[3] = "Four";
for(int i = 0; i < 10 ; i++)
Console.WriteLine(strStore[i]);
C# 泛型
示例:定义泛型类
class DataStore
{
public T Data { get; set; }
}