【C#基础】C# 基础语法解析

序号系列文章
0【C#基础】初识编程语言C#
1【C#基础】C# 程序通用结构

前言

😄 大家好,我是writer桑,前面一章已经学习了C#的程序结构,那本章就开始学习C#程序中的基础语法,希望看完大家能够有所收获,感谢支持!


基础语法

首先 C# 作为一门面向对象的编程语言,有着许多区别于其他语言不同的地方,其中包括关键字的运用、类成员、标识符等等。本章从这几个方面进行学习,以便对搭建 C# 程序有个初步的认识。

首先以下面 Square 程序的实现做示例,以借此讨论 C# 的基础语法。

using System;		// using 指令 

namespace SquareApplication		// namespace 命名空间
{
    internal class Square
    {
        // 成员字段
        private double length;
        private double width;
		
        // 成员方法
        public void Acceptdetails()
        {
            length = 4.5;
            width = 3.5;
        }

        public double GetArea()
        {
            return length * width;
        }

        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }

    class ExecuteSquare
    {
        // Main 方法的声明
        static void Main(string[] args)
        {
            Square s = new Square();	// 创建类型的新实例
            s.Acceptdetails();
            s.Display();
            Console.ReadLine();
        }
    }
}

1. using 关键字

在 C# 程序中 using 关键字有导入命名空间、创建别名、释放资源三种用法。

1,using 指令导入指定的命名空间

using System;  
  • using 指令允许使用在命名空间中定义的类型,而无需指定该类型的完全限定命名空间。using 指令以基本形式从单个命名空间导入所有类型。
  • 程序中 using System 表示导入 System 命名空间, 同时一个程序允许有多个 using 指令的存在 ,这种用法类似于 Python 中的 Import 语法。

2, using 别名指令为名称空间或类型创建别名。

using systext = System.Text;
// using systext;  // 编译器错误:未能找到类型或命名空间名"systext"
  • 创建 using 别名指令,以便更易于将标识符限定为命名空间或类型。 在任何 using 指令中,都必须使用完全限定的命名空间或类型,而无需考虑它之前的 using 指令。
  • 注意,using 指令的声明中不能使用 using 别名。否则会生成编译器错误;而且 using 别名指令的右侧不能有开放式泛型类型。 例如,不能为 List<T> 创建 using 别名,但可以为 List<int> 创建 using 别名。

3, using 语句定义一个范围,在此范围的末尾将释放对象。

// 注意 Square 类需要继承 IDisposable 接口
using (Square s = new Square())
{
    // use s..
    // 离开这个代码块资源会自动释放
}
  • 在程序编译阶段,编译器会自动将using语句生成为try-catch-finally语句,并在finally块中调用对象的Dispose方法,来清理资源。
  • using 语句提供可确保正确使用 IDisposable 对象的方便语法。 await using 语句可确保正确使用 IAsyncDisposable 对象。 C# 语言支持实现 System.IAsyncDisposable 接口的异步可释放类型。

2. namespace 关键字

在 C# 程序中 namespace 关键字用于声明命名空间,在后来的版本中有新的用法。

1,namespace 关键字用于声明包含一组相关对象的作用域。可以使用命名空间来组织代码元素并创建全局唯一类型。

namespace SquareApplication
{
    class Square
    {
        public void SquareMethod()
        {
            System.Console.WriteLine(
            "SquareMethod inside SquareNamespace");
        }
    }
} 
  • 其他文件可以直接使用 using 指令引用 SquareApplication 命名空间。
  • 命名空间的名称必须是有效的 C# 标识符名称。

2,从 C# 10 开始,可以为该文件中定义的所有类型声明一个命名空间,如以下示例所示:

namespace SquareApplication;

class Square
{
	public void SquareMethod()
	{
	    System.Console.WriteLine(
	    "SquareMethod inside SquareNamespace");
	}
}
  • 这种新语法的优点是更简单,这节省了水平空间且不必使用大括号。 提高了代码的可读性。

3. class 关键字

在 C# 程序中 class 关键字主要用于声明类

类是可在一个单元中就将字段和方法及其他函数成员结合起来的数据结构,在 C# 程序中属于最基本的类型。示例如下:

class Square
{
    // Square details
}

class ExecuteSquare
{
    // ExecuteSquare details
}
  • 用 class 关键字声明的类型为引用类型,方便其它代码创建类实例对象。
  • 使用 class 关键字声明的类名称必须是有效的 C# 标识符名称。
  • class 关键字前面是访问级别,默认为 internal 类型, 即同一个程序集的对象可以访问。

4. 成员字段

成员字段也就是在类范围中声明的变量

变量声明语法: <data_type> <var_name>;在 Square 类中声明了 width 和 length 两个成员字段:

private double length;		
private double width;
  • 成员字段是在类范围声明的变量。 变量是类的属性或数据成员,用于存储数据。
  • 变量的 data_type 声明必须是有效的 C# 数据类型,var_name 名称必须是有效的 C# 标识符名称。
  • data_type 前面是变量的访问级别,默认为 private 类型,即对象本身在对象内部可以访问。

5. 成员方法

成员方法也即类中定义的可以执行的函数

方法声明语法:<Access Specifier> <Return Type> <Method Name>(Parameter List) { Method Body } ; Square 类包含了三个成员方法: AcceptDetails、GetArea 和 Display。

// 成员方法
public void Acceptdetails()
{
	// Method Body
}

public double GetArea()
{
	// Method Body
}

public void Display()
{
    // Method Body 
}
  • 成员方法定义类执行的操作。 方法可接受提供输入数据的参数,并可通过参数返回输出数据。 方法还可以不使用参数而直接返回值。
  • 在声明语法中 Access Specifier、Return Type、Method Name 分别表示访问说明、返回类型、方法名称。其中返回类型和名称必须声明,访问权限默认为 private, 即对象本身在对象内部可以访问 。

6. Main 方法

在 C# 程序中 Main 方法是定义程序的入口点

在示例程序中,ExecuteSquare 类声明了 Main 方法:

static void Main(string[] args)
{
    // Main Method Body
}
  • Main 方法是程序控制开始和结束的位置, 它决定着当前类具体的行为。
  • Main 在类或结构中声,Main 必须是 static,它不需要是 public。且封闭类或结构不一定要是静态的。
  • Main 的返回类型可以是 void、int、Task 或 Task<int>。
  • 在 C# 9 之前程序必须声明 Main 方法,否则会报编译器错误, 而在 C# 9 之后(包含 C# 9)则可以使用顶级语句,无需应用程序中显式声明 Main 方法。

7. new 关键字

在 C# 程序中可以使用 new 关键字创建实例、声明修饰符、作为类型约束。

1,new 运算符创建类型的新实例

// 创建类型的新实例 
Square s = new Square() 
{
    // 在这设定初始值
};	
  • 使用 new 运算符创建类型的新实例的同时会调用该类型的某个构造函数
  • 使用带有new运算符的对象或集合初始值设定项会实例化和初始化一个语句中的对象

2,new 关键字用作成员声明修饰符

// 使用 DerivedC.Invoke 隐藏了 BaseC.Invoke。
// 字段 x 不受影响,因为未使用类似名称将其隐藏。
public class BaseC
{
    public int x;
    public void Invoke() { }
}

public class DerivedC : BaseC
{
    new public void Invoke() { }
}
  • new 修饰符可以显式隐藏从基类继承的成员
  • 隐藏继承的成员时,该成员的派生版本将替换基类版本

3,new 关键字用作泛型类型约束

class ItemFactory<T> where T : new()
{
	public T GetNewItem()
    {
        return new T();
    }
}
  • new 约束指定泛型类或方法声明中的类型实参必须有公共的无参数构造函数。
  • 若要使用 new 约束,则该类型不能为抽象类型。

8. 标识符

标识符是分配给类型(类、接口、结构、记录、委托或枚举)、成员、变量或命名空间的名称。以下是 C# 标识符命名规则和约定:

命名规则:

有效标识符必须遵循以下规则:

  • 标识符必须以字母或下划线 ( _ ) 开头。
  • 标识符可以包含 Unicode 字母字符、十进制数字字符、Unicode 连接字符、Unicode 组合字符或 Unicode 格式字符。
  • 可以在标识符上使用 @ 前缀来声明与 C# 关键字匹配的标识符。 @ 不是标识符名称的一部分。 例如,@if 声明名为 if 的标识符。 这些逐字标识符主要用于与使用其他语言声明的标识符的互操作性。

命名约定:

除了规则之外,C # 程序的类型名称、命名空间和所有公共成员也应当遵循PascalCase(变量命名方法)。 以下为常见的约定:

  • 接口名称以大写字母 I 开头。
  • 属性类型以单词 Attribute 结尾。
  • 枚举类型对非标记使用单数名词,对标记使用复数名词。
  • 标识符不应包含两个连续的下划线 ( _ ) 字符。 这些名称保留给编译器生成的标识符。

9. 关键字

关键字是预定义的保留标识符,对编译器有特殊意义。 除非前面有 @ 前缀,否则不能在程序中用作标识符。 例如,@if 是有效标识符,而 if 则不是,因为 if 是关键字。

1,第一个表列出了是 C# 程序任意部分中的保留标识符的关键字:

保留关键字
abstractasbaseboolbreakbytecase
catchcharcheckedclassconstcontinuedecimal
defaultdelegatedodoubleelseenumevent
explicitexternfalsefinallyfixedfloatfor
foreachgotoifimplicitinintinterface
internalislocklongnamespacenewnull
objectoperatoroutoverrideparamsprivateprotected
publicreadonlyrefreturnsbytesealedshort
sizeofstackallocstaticstringstructswitchthis
throwtruetrytypeofuintulongunchecked
unsafeushortusingvirtualvoidvolatilewhile

2, 以下三个表列出了 C# 中的上下文关键字。 上下文关键字用于在代码中提供特定含义,但它不是 C# 中的保留字。 一些上下文关键字(如 partial 和where)在两个或多个上下文中有特殊含义。

上下文关键字
addandaliasascendingargsasyncawait
bydescendingdynamicequalsfromgetglobal
groupinitintojoinlet
托管(函数指针调用约定)
nameofnintnotnotnullnuintonor
orderbypartial(类型)partial(方法)recordremoveselectset
非托管(函数指针调用约定)
unmanaged(泛型类型约)valuevarwhen(筛选条件)
where(泛型类型约束)where(查询子句)withyield
  • 上下文关键字仅在一部分程序上下文中有特殊含义,可以在相应上下文范围之外用作标识符。
  • 一般来说,C# 语言中新增的关键字会作为上下文关键字添加,以免破坏用旧版语言编写的程序。

结语

✔️ 以上就是 C# 基础语法的介绍,希望能够对大家有所帮助。望大家多多支持,你们的支持就是笔者创作最大的动力!

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
### 回答1: C语言是一种高效、通用的编程语言,广泛应用于计算机科学领域。这里我将深入解析C语言的一些重要特性和概念。 首先,C语言具有高度的可移植性。由于C语言的设计目标是为了编写可移植的系统软件,它在不同的操作系统和硬件平台上都能运行。这意味着使用C语言编写的程序可以在许多不同的计算机上运行,而无需对代码进行太多的修改。 其次,C语言是一种低级的编程语言。这意味着它的语法和结构相对简单,更贴近于底层的计算机硬件。对于有一定编程基础的人来说,学习和理解C语言相对较为容易。同时,低级语言的特点也使得程序员可以更好地控制计算机的硬件资源,提高程序的运行效率。 另外,C语言还支持面向过程的编程风格。这种编程范式注重程序的结构化和模块化,通过定义函数和变量来实现任务的分解和组合。面向过程的编程可以使程序更易于理解和维护,并提高代码的可重用性。 此外,C语言也允许进行底层的、直接的内存操作。这使得程序员可以通过指针来访问和修改内存中的数据,进一步提高程序的性能和灵活性。 最后,C语言还具备大量的标准库函数,可以方便地进行各种常用的计算和操作。这些函数提供了丰富的功能和扩展性,可以满足各种程序的需求。 总之,深入解析C语言可以让我们更全面地了解其特点和潜力。掌握C语言的核心概念和技巧,将有助于我们更好地理解计算机系统以及开发高效、可靠的程序。 ### 回答2: C是一种高级编程语言,广泛应用于系统软件开发、嵌入式系统以及游戏开发等领域。深入解析C语言意味着要研究其语法规则、编译原理、数据类型、控制流程、函数和指针等核心概念。 首先,C语言语法规则相对简洁明了,主要包括变量的声明与赋值、运算符、条件语句、循环语句、函数的定义与调用等。了解这些语法规则是理解和编写C程序的基础。 其次,了解C语言的编译原理对于深入理解C语言非常重要。C语言源代码需通过编译器翻译为机器语言,然后才能在计算机上执行。了解编译原理可帮助我们更好地理解C程序的工作原理,从而编写高效、可靠的代码。 数据类型也是理解C语言的重要部分。C语言提供了几种基本数据类型,如整数、浮点数、字符等,同时也支持定义自定义的数据结构。深入了解这些数据类型及其特点,可以帮助我们更好地进行数据处理和操作。 控制流程是编程中的关键概念之一,也是C语言中的核心内容。条件语句与循环语句的灵活使用可以控制程序的执行流程,使程序能够按照我们所期望的方式运行。 函数是C语言的重要组成部分,通过函数的定义和调用可以实现代码的模块化和复用。理解函数的使用方法以及参数传递的机制对于程序的设计和调试非常关键。 此外,指针是C语言中的重要特性之一,对于深入解析C语言也至关重要。指针提供了直接访问内存和地址的能力,也是实现数据结构和动态内存分配的基础。 总之,深入解析C语言需要我们逐步掌握以上的核心概念和技术,并通过实际编程练习来巩固和应用所学知识。只有不断学习和实践,才能真正理解并灵活运用C语言

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈桑indie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值