C#: 关键字

发布时间 2023-04-06 09:47:28作者: 十二年新

abstract, as, base, bool, break, byte, case, catch, char, checked, class, const, continue, decimal, default, delegate, do, double, else, enum, event, explicit, extern, false, finally, fixed, float, for, foreach, goto, if, implicit, in, int, interface, internal, is, lock, long, namespace, new, null, object, operator, out, override, params, private, protected, public, readonly, ref, return, sbyte, sealed, short, sizeof, stackalloc, static, string, struct, switch, this, throw, true, try, typeof, uint, ulong, unchecked, unsafe, ushort, using, virtual, void, volatile, while.  

abstract

在 C# 中,abstract 关键字用于定义抽象类和抽象方法。抽象类是不能被实例化的类,而抽象方法是没有实现的方法,需要在子类中被实现。 

抽象类

抽象类是用于表示一类对象的基类,但是它本身不能被实例化。抽象类通常包含一些抽象方法,这些方法需要在子类中被实现。抽象类可以包含非抽象方法和字段,这些成员可以被子类继承和使用。

定义抽象类的语法如下: 

abstract class MyClass
{
    // 抽象方法
    public abstract void MyMethod();
 
    // 非抽象方法
    public void MyOtherMethod()
    {
        // ...
    }
}

抽象方法

抽象方法是没有实现的方法,需要在子类中被实现。抽象方法只有方法签名,没有方法体。定义抽象方法的语法如下:

abstract class MyClass
{
    public abstract void MyMethod();
}

子类必须实现抽象方法,否则会编译错误。例如: 

class MyDerivedClass : MyClass
{
    public override void MyMethod()
    {
        // 实现抽象方法
    }
}

总结 

abstract 关键字用于定义抽象类和抽象方法。抽象类是不能被实例化的类,而抽象方法是没有实现的方法,需要在子类中被实现。抽象类可以包含非抽象方法和字段,这些成员可以被子类继承和使用。子类必须实现抽象方法,否则会编译错误。

as

as 关键字在 C# 中用于显式类型转换。它允许您将一个类型的对象转换为另一个类型,前提是转换是有效的。 

以下是 as 关键字在 C# 中的使用示例: 

object obj = "Hello World";
string str = obj as string;

在上面的代码中,我们有一个包含字符串 "Hello World" 的对象 obj。然后,我们使用 as 关键字将 obj 转换为字符串类型,并将其赋值给变量 str。如果转换无效,则 str 将被赋予空值。

base

base 是 C# 中的一个关键字,它用于访问基类中的成员。在派生类中,我们可以使用 base 关键字来调用基类中的构造函数、方法和属性。 

访问基类构造函数

在派生类的构造函数中,我们可以使用 base 关键字来调用基类的构造函数。这样做的好处是可以在派生类的构造函数中初始化基类中的字段。 

以下是一个例子: 

public class MyBaseClass
{
    private int myField;
 
    public MyBaseClass(int myField)
    {
        this.myField = myField;
    }
}
 
public class MyDerivedClass : MyBaseClass
{
    public MyDerivedClass(int myField) : base(myField)
    {
    }
}

在上面的例子中,MyDerivedClass 继承自 MyBaseClass。在 MyDerivedClass 的构造函数中,我们使用 base 关键字来调用 MyBaseClass 的构造函数,并将 myField 参数传递给它。 

访问基类方法和属性

在派生类中,我们可以使用 base 关键字来调用基类中的方法和属性。以下是一个例子: 

public class MyBaseClass
{
    public virtual void MyMethod()
    {
        Console.WriteLine("MyBaseClass.MyMethod");
    }
 
    public virtual int MyProperty
    {
        get { return 42; }
    }
}
 
public class MyDerivedClass : MyBaseClass
{
    public override void MyMethod()
    {
        base.MyMethod();
        Console.WriteLine("MyDerivedClass.MyMethod");
    }
 
    public override int MyProperty
    {
        get { return base.MyProperty + 1; }
    }
}

在上面的例子中,MyDerivedClass 继承自 MyBaseClass。在 MyDerivedClass 中,我们重写了 MyMethod 和 MyProperty 方法,并使用 base 关键字来调用基类中的方法和属性。

bool 

bool 是 C# 中的一个关键字,用于表示布尔值,即 true 或 false。 

在 C# 中,布尔类型是一种基本数据类型,可以用于逻辑运算和条件语句中。例如,可以使用布尔类型来表示某个条件是否成立,或者在循环中判断是否继续执行。

以下是一个简单的示例,演示了如何使用 bool 类型: 

bool isTrue = true;
bool isFalse = false;
 
if (isTrue)
{
    Console.WriteLine("isTrue is true");
}
 
if (!isFalse)
{
    Console.WriteLine("isFalse is false");
}

在上面的示例中,我们定义了两个布尔变量 isTrue 和 isFalse,并使用 if 语句检查它们的值。第一个 if 语句检查 isTrue 是否为 true,如果是,则输出一条消息。第二个 if 语句使用逻辑非运算符 ! 检查 isFalse 是否为

false,如果是,则输出一条消息。除了 true 和 false,布尔类型还可以使用以下方式进行初始化:
  • bool isTrue = true;
  • bool isFalse = false;
  • bool isBool = bool.Parse("True");
  • bool isBool = bool.Parse("False");
  • bool isBool = bool.TryParse("True", out bool result);
  • bool isBool = bool.TryParse("False", out bool result);

其中,bool.Parse 方法将字符串转换为布尔值,如果字符串不是有效的布尔值,则会引发异常。bool.TryParse 方法也将字符串转换为布尔值,但如果字符串不是有效的布尔值,则不会引发异常,而是将结果设置为false

break 

break 是 C# 中的一个关键字,用于在循环语句中提前结束循环。当 break 语句被执行时,程序将跳出当前循环并继续执行循环后面的代码。 

以下是一个使用 break 的示例: 

while (true)
{
    // do something
    if (condition)
    {
        break;
    }
    // do something else
}

在上面的代码中,当 condition 满足时,break 语句将被执行,程序将跳出循环并继续执行循环后面的代码。 

需要注意的是,break 只能用于循环语句中,不能用于其他语句中。如果在非循环语句中使用 break,编译器将会报错。 

byte 

byte 是 C# 中的一个关键字,用于声明一个 8 位无符号整数。byte 类型的变量可以存储 0 到 255 之间的整数。 

以下是一个使用 byte 的示例: 

byte b = 255;

 在上面的代码中,b 是一个 byte 类型的变量,它存储了一个值为 255 的整数。 

需要注意的是,byte 类型的变量只能存储 0 到 255 之间的整数。如果存储的值超出了这个范围,编译器将会报错。 

case 

case 是 C# 中的一个关键字,用于在 switch 语句中匹配一个常量表达式。 

以下是一个使用 case 的示例: 

switch (variable)
{
    case 1:
        // do something
        break;
    case 2:
        // do something else
        break;
    default:
        // do something if none of the cases match
        break;
}

在上面的代码中,case 用于匹配 variable 的值。如果 variable 的值等于 1,则执行第一个 case 中的代码;如果 variable 的值等于 2,则执行第二个 case 中的代码;如果 variable 的值不等于 1 或 2,则执行 default 中的代码。 

需要注意的是,每个 case 后面必须跟一个 break 语句,否则程序将会继续执行下一个 case 中的代码。如果没有匹配的 case,则执行 default 中的代码。

catch 

catch 是 C# 中的一个关键字,用于捕获异常并处理异常情况。在 try 块中,如果发生了异常,程序将跳转到 catch 块中执行相应的代码。 

以下是一个使用 catch 的示例: 

try
{
    // do something that may throw an exception
}
catch (Exception ex)
{
    // handle the exception
}

在上面的代码中,try 块中的代码可能会抛出异常。如果发生了异常,程序将跳转到 catch 块中执行相应的代码。catch 块中的参数 ex 是一个 Exception 类型的变量,它用于存储捕获到的异常信息。 

需要注意的是,catch 块必须跟在 try 块后面,并且可以有多个 catch 块来处理不同类型的异常。如果没有发生异常,程序将跳过 catch 块并继续执行后面的代码。

char 

char 是 C# 中的一个关键字,用于声明一个 Unicode 字符。char 类型的变量可以存储任意 Unicode 字符。 
以下是一个使用 char 的示例: 
char c = 'A';

 

在上面的代码中,c 是一个 char 类型的变量,它存储了一个 Unicode 字符 'A'。 

需要注意的是,char 类型的变量只能存储一个字符。如果需要存储多个字符,可以使用字符串类型 string。 

另外,char 类型的变量可以使用转义字符来表示一些特殊字符,例如: 

char c = '\n'; // 表示换行符

 

checked 

checked 是 C# 中的一个关键字,用于在进行算术运算时检查是否发生了溢出。如果发生了溢出,程序将抛出 System.OverflowException 异常。 

以下是一个使用 checked 的示例: 

int a = int.MaxValue;
int b = 1;
int c = checked(a + b); // 抛出 System.OverflowException 异常

在上面的代码中,a 的值为 int.MaxValue,b 的值为 1。由于 a 和 b 相加的结果超出了 int 类型的取值范围,因此程序将抛出 System.OverflowException 异常。 

需要注意的是,checked 关键字只对当前语句块中的算术运算有效。如果需要对整个方法或类中的算术运算进行检查,可以使用 checked 块。 

以下是一个使用 checked 块的示例: 

checked
{
    int a = int.MaxValue;
    int b = 1;
    int c = a + b; // 抛出 System.OverflowException 异常
}

在上面的代码中,checked 块中的所有算术运算都将进行溢出检查。

class 

class 是 C# 中的一个关键字,用于定义一个类。类是 C# 中的基本概念之一,用于封装数据和行为。 

以下是一个使用 class 的示例: 

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
 
    public void SayHello()
    {
        Console.WriteLine("Hello, my name is " + Name + " and I am " + Age + " years old.");
    }
}

在上面的代码中,Person 是一个类,它有两个属性 Name 和 Age,以及一个方法 SayHello。属性用于存储数据,方法用于定义行为。 

需要注意的是,类必须包含在命名空间中。命名空间用于组织代码,避免命名冲突。

以下是一个包含 Person 类的命名空间的示例: 

namespace MyNamespace
{
    class Person
    {
        // ...
    }
}

另外,类可以继承自其他类。继承是一种重要的面向对象编程概念,它允许子类继承父类的属性和方法,并可以添加自己的属性和方法。以下是一个继承自 Person 类的 Student 类的示例:

class Student : Person
{
    public string School { get; set; }
 
    public void Study()
    {
        Console.WriteLine("I am studying at " + School + ".");
    }
}

在上面的代码中,Student 类继承自 Person 类,并添加了一个属性 School 和一个方法 Study。 

const 

const 是 C# 中的一个关键字,用于声明一个常量。常量是一种特殊的变量,它的值在声明后不能被修改。 

以下是一个使用 const 的示例: 

const int MaxValue = 100;

在上面的代码中,MaxValue 是一个常量,它的值为 100。由于 MaxValue 是一个常量,因此它的值在声明后不能被修改。 

需要注意的是,常量必须在声明时进行初始化,并且只能使用常量表达式进行初始化。常量表达式是一种在编译时可以确定值的表达式,例如: 

const int MaxValue = 100 + 200; // 合法的常量表达式
const int MinValue = GetMinValue(); // 非法的常量表达式

在上面的代码中,MaxValue 的初始化表达式是一个常量表达式,因此它是合法的。而 MinValue 的初始化表达式调用了一个方法 GetMinValue(),因此它不是常量表达式,是非法的。 

另外,常量可以用于各种数据类型,包括整型、浮点型、字符型、字符串型等等。以下是一些常量的示例: 

const double Pi = 3.1415926;
const char NewLine = '\n';
const string Greeting = "Hello, world!";

continue

continue 是 C# 中的一个关键字,用于在循环语句中跳过当前迭代并进入下一次迭代。
continue 通常与 forwhiledo-while 等循环语句一起使用。在循环语句中使用 continue 可以跳过某些特定的值或条件,从而使程序更加高效。

需要注意的是,continue 关键字只能在循环语句中使用。如果在非循环语句中使用 continue,编译器将会报错。 

以下是一个使用 continue 的示例: 

int i = 0;
while (i < 10)
{
    i++;
    if (i % 2 == 0)
    {
        continue;
    }
    Console.WriteLine(i);
}

在上面的代码中,我们使用 while 循环从 1 到 10 迭代。然而,我们使用 continue 关键字跳过任何偶数并仅打印奇数。因此,这段代码的输出将是:

0、2、4、6、8

你还可以使用标签和 continue 关键字一起跳过嵌套循环中的特定值。以下是一个示例:

 
for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        if (j == 5)
        {
            continue;
        }
        Console.WriteLine(i + "," + j);
    }
}

在上面的代码中,我们使用嵌套的 for 循环来迭代从 0 到 9 的所有 i 和 j 的组合。然而,我们使用 continue 来跳过任何值等于 5 的 j。因此,这段代码的输出将是除了 j 等于 5 的所有 i 和 j。

decimal

decimal是C#中的一种数据类型,用于表示十进制数。它比doublefloat更精确,因为它可以存储更多的小数位。在需要高精度计算的场景下,decimal是一个非常有用的数据类型。

以下是一些关于decimal的特点和用法: 

  • decimal类型的变量可以使用Mm后缀来声明。例如:
    decimal myDecimal = 123.45M;
  • decimal类型的默认值为0M
  • decimal类型的运算符和其他数字类型一样,包括+-*/等。
  • decimal类型的运算符可以与其他数字类型进行混合运算,但需要进行类型转换。
  • decimal类型的精度为28-29位小数,而double类型的精度为15-16位小数。
  • decimal类型的范围为±1.0 x 10^-28 到 ±7.9 x 10^28。

以下是一个使用decimal类型的示例代码: 

decimal price = 19.99M;
decimal taxRate = 0.08M;
decimal taxAmount = price * taxRate;
decimal total = price + taxAmount;
Console.WriteLine("Price: {0:C}", price);
Console.WriteLine("Tax: {0:C}", taxAmount);
Console.WriteLine("Total: {0:C}", total);

在上面的示例中,我们使用decimal类型来计算商品价格、税率、税额和总价,并使用Console.WriteLine方法将结果输出到控制台。 

default 

default是C#中的一个关键字,用于获取类型的默认值。当我们声明一个变量但没有给它赋值时,它的值将会是该类型的默认值。例如,int类型的默认值为0bool类型的默认值为false

以下是一些关于default的特点和用法: 

  • default关键字可以用于任何类型,包括值类型和引用类型。
  • 对于值类型default关键字返回该类型的零值。例如,default(int)返回0,default(bool)返回false。对于引用类型,default关键字返回null。
  • default关键字可以用于泛型类型参数,以获取该类型的默认值。例如,default(T)返回T类型的默认值。
  • default关键字可以用于switch语句中的case分支,以表示默认分支。例如: 
switch (myVariable)
{
    case 1:
        // do something
        break;
    case 2:
        // do something else
        break;
    default:
        // do default action
        break;
}

在上面的示例中,如果myVariable的值既不是1也不是2,则执行默认分支。

delegate

delegate是C#中的一个关键字,用于声明委托类型。委托类型是一种可以封装方法的类型,它可以用于回调函数、事件处理程序等场景。以下是一些关于delegate的特点和用法: 
  •  delegate关键字用于声明委托类型。例如,下面的代码声明了一个名为MyDelegate的委托类型,它可以封装一个返回int类型、参数为string类型的方法:

    delegate int MyDelegate(string arg);
  • 委托类型可以用于声明委托变量。例如,下面的代码声明了一个名为myDelegate的委托变量,它可以引用一个返回int类型、参数为string类型的方法: 

    MyDelegate myDelegate = MyMethod;
  • 委托变量可以通过+=-=运算符来添加和移除方法。例如,下面的代码添加了一个名为MyOtherMethod的方法到myDelegate中:

    myDelegate += MyOtherMethod;
  • 委托变量可以通过()运算符来调用封装的方法。例如,下面的代码调用了myDelegate中封装的方法,并将"hello"作为参数传递给它:

    int result = myDelegate("hello");
  • 委托类型可以用于声明事件。例如,下面的代码声明了一个名为MyEvent的事件,它使用MyDelegate类型作为事件处理程序的类型: 

    event MyDelegate MyEvent;
  • 事件可以通过+=-=运算符来添加和移除事件处理程序。例如,下面的代码添加了一个名为MyEventHandler的事件处理程序到MyEvent中:

    MyEvent += MyEventHandler;

do

do是C#中的一个关键字,用于声明do-while循环。do-while循环是一种先执行循环体,再判断循环条件的循环结构。以下是一些关于do的特点和用法:  

do关键字用于声明do-while循环。例如,下面的代码声明了一个do-while循环,它会一直执行循环体,直到conditionfalse 
do
{
    // do something
} while (condition);
  • do-while循环至少会执行一次循环体,即使循环条件一开始就为false

  • do-while循环可以用于需要至少执行一次的循环场景,例如读取用户输入、处理异常等。

double

double是C#中的一个关键字,用于声明双精度浮点数类型。双精度浮点数类型可以表示更大范围和更高精度的实数值,它通常用于需要更高精度计算的场景,例如科学计算、金融计算等。 

以下是一些关于double的特点和用法: 

  •  double关键字用于声明双精度浮点数类型。例如,下面的代码声明了一个名为myDouble的双精度浮点数变量: 

    double myDouble = 3.14159;
  • 双精度浮点数类型可以表示的范围为±5.0 × 10^-324到±1.7 × 10^308,精度为15-16位小数。

  • 双精度浮点数类型可以进行基本的算术运算,例如加减乘除、取余等。例如,下面的代码计算了两个双精度浮点数的和: 

    double result = myDouble1 + myDouble2;
  • 双精度浮点数类型可以进行比较运算,例如等于、大于、小于等。需要注意的是,由于浮点数的精度问题,比较运算可能会出现意外的结果。例如,下面的代码比较了两个双精度浮点数的大小: 

    bool isGreater = myDouble1 > myDouble2;

else

else是C#中的一个关键字,用于在条件语句中指定当条件不成立时要执行的代码块。以下是一些关于else的特点和用法: 
  •  else关键字通常与if关键字一起使用,用于指定当if条件不成立时要执行的代码块。例如,下面的代码使用了ifelse关键字,根据condition的值来执行不同的代码块: 

    if (condition)
    {
        // do something if condition is true
    }
    else
    {
        // do something else if condition is false
    }
  • else关键字也可以与if关键字的嵌套使用,用于指定多个条件的执行代码块。例如,下面的代码使用了两个if和一个else关键字,根据condition1condition2的值来执行不同的代码块: 
     
    if (condition1)
    {
        // do something if condition1 is true
    }
    else if (condition2)
    {
        // do something else if condition2 is true
    }
    else
    {
        // do something else if both condition1 and condition2 are false
    }
  •  else关键字可以省略,只使用if关键字来指定条件语句。这种情况下,如果条件不成立,则不执行任何代码。例如,下面的代码只使用了if关键字,如果condition不成立,则不执行任何代码: 

    if (condition)
    {
        // do something if condition is true
    }

     

else

关键字在C#中的用法。