02C#基本结构篇(D1_基本语法)

目录

一、前言

[二、using 关键字](#二、using 关键字)

[三、class 关键字](#三、class 关键字)

[四、C# 中的注释](# 中的注释)

五、成员变量

六、成员函数

七、实例化一个类

八、标识符

[九、C# 关键字](# 关键字)

[十一、顶级语句(Top-Level Statements)](#十一、顶级语句(Top-Level Statements))

实例一

实例二

实例三

注意事项

十二、Java与C#的语法区别

[1. 命名空间与包](#1. 命名空间与包)

[2. 类的访问控制方面的不同](#2. 类的访问控制方面的不同)

[3. 类成员的访问控制](#3. 类成员的访问控制)

4. C#中类的继承用通过冒号:实现,在Java中用extends

[5. 基本结构对比](#5. 基本结构对比)

十三、参考链接


一、前言

C# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对

象通常具有相同的类型,或者说,是在相同的 class 中。

例如,以 Rectangle(矩形)对象为例。

它具有 length 和 width 属性。根据设计,它可能需要接受这些属性值、计算面积和显示细节。

让我们来看看一个 Rectangle(矩形)类的实现,并借此讨论 C# 的基本语法:

实例

using System;
namespace RectangleApplication
{
    class Rectangle
    {
        // 成员变量
        double length;
        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 ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.Acceptdetails();
            r.Display();
            Console.ReadLine();
        }
    }
}

当上面的代码被编译和执行时,它会产生下列结果:

Length: 4.5
Width: 3.5
Area: 15.75

二、using 关键字

在任何 C# 程序中的第一条语句都是:

using System;

using 关键字用于在程序中包含命名空间。一个程序可以包含多个 using 语句。

三、class 关键字

class 关键字用于声明一个类。

四、C# 中的注释

注释是用于解释代码。编译器会忽略注释的条目。

在 C# 程序中,多行注释以 /* 开始,并以字符 */ 终止,如下所示:

/* 这个程序演示
C# 的注释
使用 */

单行注释是用 // 符号表示。例如:

// 这一行是注释 

五、成员变量

变量是类的属性或数据成员,用于存储数据。

在上面的程序中,Rectangle 类有两个成员变量,名为 lengthwidth

六、成员函数

函数是一系列执行指定任务的语句。类的成员函数是在类内声明的。

我们举例的类 Rectangle 包含了三个成员函数:AcceptDetailsGetAreaDisplay

七、实例化一个类

在上面的程序中,类 ExecuteRectangle 是一个包含 Main() 方法和实例化 Rectangle 类的类。

八、标识符

标识符是用来识别类、变量、函数或任何其它用户定义的项目。在 C# 中,类的命名必须遵循如下基本规则:

  • 标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字( 0 - 9 )、下划线( _ )、@。
  • 标识符中的第一个字符不能是数字。
  • 标识符必须不包含任何嵌入的空格或符号,比如 ? - +! # % ^ & * ( ) [ ] { } . ; : " ' / \。
  • 标识符不能是 C# 关键字。除非它们有一个 @ 前缀。 例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
  • 标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。
  • 不能与C#的类库名称相同。

九、C# 关键字

关键字是 C# 编译器预定义的保留字。这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,

可以在关键字前面加上 @ 字符作为前缀。

在 C# 中,有些关键字在代码的上下文中有特殊的意义,如 get 和 set,这些被称为上下文关键字

(contextual keywords)。

下表列出了 C# 中的保留关键字(Reserved Keywords)和上下文关键字(Contextual Keywords):

|------------------|-----------|-----------|------------|------------------------|-----------------------|----------------|
| 保留关键字 |||||||
| 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 | in (generic modifier) | int |
| interface | internal | is | lock | long | namespace | new |
| null | object | operator | out | out (generic modifier) | 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 | | | | | |
| 上下文关键字 |||||||
| add | alias | ascending | descending | dynamic | from | get |
| global | group | into | join | let | orderby | partial (type) |
| partial (method) | remove | select | set | | | |

十一、顶级语句(Top-Level Statements)

在 C# 9.0 版本中,引入了顶级语句(Top-Level Statements)的概念,这是一种新的编程范式,允许开发者在文

件的顶层直接编写语句,而不需要将它们封装在方法或类中。

特点:

  • 无需类或方法:顶级语句允许你直接在文件的顶层编写代码,无需定义类或方法。
  • 文件作为入口点:包含顶级语句的文件被视为程序的入口点,类似于 C# 之前的 Main 方法。
  • 自动 Main 方法:编译器会自动生成一个 Main 方法,并将顶级语句作为 Main 方法的主体。
  • 支持局部函数:尽管不需要定义类,但顶级语句的文件中仍然可以定义局部函数。
  • 更好的可读性:对于简单的脚本或工具,顶级语句提供了更好的可读性和简洁性。
  • 适用于小型项目:顶级语句非常适合小型项目或脚本,可以快速编写和运行代码。
  • 与现有代码兼容:顶级语句可以与现有的 C# 代码库一起使用,不会影响现有代码。

传统 C# 代码 - 在使用顶级语句之前,你必须像这样编写一个 C# 程序:

实例一

using System;

namespace MyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

使用顶级语句的 C# 代码 - 使用顶级语句,可以简化为:

实例二

using System;

Console.WriteLine("Hello, World!");

顶级语句支持所有常见的 C# 语法,包括声明变量、定义方法、处理异常等。

实例三

using System;
using System.Linq;

// 顶级语句中的变量声明
int number = 42;
string message = "The answer to life, the universe, and everything is";

// 输出变量
Console.WriteLine($"{message} {number}.");

// 定义和调用方法
int Add(int a, int b) => a + b;
Console.WriteLine($"Sum of 1 and 2 is {Add(1, 2)}.");

// 使用 LINQ
var numbers = new[] { 1, 2, 3, 4, 5 };
var evens = numbers.Where(n => n % 2 == 0).ToArray();
Console.WriteLine("Even numbers: " + string.Join(", ", evens));

// 异常处理
try
{
    int zero = 0;
    int result = number / zero;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Error: " + ex.Message);
}

注意事项

  • **文件限制:**顶级语句只能在一个源文件中使用。如果在一个项目中有多个使用顶级语句的文件,会导致编译错误。
  • **程序入口:**如果使用顶级语句,则该文件会隐式地包含 Main 方法,并且该文件将成为程序的入口点。
  • **作用域限制:**顶级语句中的代码共享一个全局作用域,这意味着可以在顶级语句中定义的变量和方法可以在整个文件中访问。

顶级语句在简化代码结构、降低学习难度和加快开发速度方面具有显著优势,特别适合于编写简单程序和脚本。

十二、Java与C#的语法区别

由Java转入C#一段时间了,总结下个人认为的Java同C#语法之间的不同之处,有不同意见之处还望各位海涵,刚

学Java时觉得语法同C#大致是相同的(应该说C#同Java大致相同

由Java转入C#一段时间了,总结下个人认为的C#同Java语法之间的不同之处,有不同意见之处还望各位海涵

刚学C#时觉得Java语法同大致是相同的(应该说C#同Java大致相同,毕竟人家微软的C#是有意模仿Java的语法习

惯的)

比尔.盖茨曾经说过:"Java是最卓越的程序设计语言"

言归正传,下面探讨Java同C#的语法不同之处。。。

1. 命名空间与包

C#为了把实现相似功能的类组织在一起,引入了命名空间的概念(namespace)

Java中与此对应的东西叫做包(package)

2. 类的访问控制方面的不同

C#只有两种:public和默认(同internal)

public能被所有的类(同项目中和不同项目中)访问

internal(在class关键字前不加控制符时默认为internal),表明类只能在同一项目中访问

Java也只有两种:public和默认

public能被所有的类访问

默认(在class关键字前不加控制符时)只能被同一包中的所有类访问

3. 类成员的访问控制

C#中有四种:public,protected,private(默认),internal(注意这里internal和默认是不同的)

  • public能被所有的类访问
  • protected只能被子类访问
  • private(也即不写任何控制符时的默认情况下)只能类内部访问
  • internal能被同一项目中的类访问

Java也有四种:public,protected,private和默认

  • public能被所有的类访问
  • protected既能被同一个包中的其他类访问,也可以被不同包中的子类访问
  • private只能在类内部使用
  • 默认可以被这个包中的其他类访问,如果一个子类与父类位于不同的包中,子类也不能访问父类中的默认访问控制成员

4. C#中类的继承用通过冒号:实现,在Java中用extends

C#中实现接口通过冒号:实现,在Java中用implements

C#中密封类用sealed实现,在Java中用final

C#中常数用const实现,在Java中用final

C#中属性用set,get代码块实现,在Java中一般用类似于C#中的字段代表属性,或者用setter,getter构造器实现

C#中有部分类(partial)的概念,Java中没有

C#中有readonly修饰属性只读,Java中没有

C#中有virtual和override修饰虚方法和重写方法,Java中没有,Java中默认父类中的方法都是virtual的

Java中有static{},synchroized{}代码块的概念,C#中没有

Java中有标签(如labelA:)的概念,C#中没有

C#中子类调用父类的方法用base.method(),Java中用super.method()

C#中用is来判断一个实例是否是某一个类的,Java中用instanceof

C#中用foreach(int i in array)来对数组中每一个元素的遍历,Java中用for(int i : array)

5. 基本结构对比

在C#中,类和接口的概念与Java中的类似,但有一些细微的差别。

下面是Java中的一些基本概念与C#中对应概念的对比:

  1. 类 (Class):
  • Java: 用于创建对象的模板。可以包含字段、方法、构造函数等。
  • C#: 同样用于创建对象的模板。可以包含字段、属性、方法、构造函数等。
  1. 抽象类 (Abstract Class):
  • Java: 不能直接实例化,用于提供一种模板,让其他类继承并实现其方法。
  • C#: 不能直接实例化,用于提供一种模板,让其他类继承并实现其方法。
  1. 接口 (Interface):
  • Java: 定义了一个类必须实现的方法,但没有提供这些方法的实现。
  • C#: 同样定义了一个类必须实现的方法,但没有提供这些方法的实现。C#中的接口还可以包含属性、方法、事件和索引器(但不包含字段)。
  1. 枚举 (Enum):
  • Java: 用于定义变量,该变量可以是预定义的一组常量之一。
  • C#: 用于定义变量,该变量可以是预定义的一组常量之一。
  1. 注解 (Annotation):
  • Java: 用于为代码提供元数据信息,例如标记代码元素(如类、方法、字段等)以供编译器或运行时使用。
  • C#: 同样用于为代码提供元数据信息,例如特性(Attributes)在C#中用来提供类似的功能。

例如,[Serializable] 在C#中用来标记类是可序列化的。

  1. 数组 (Array):
  • Java: 用于存储固定大小的同类型元素序列。
  • C#: 同样用于存储固定大小的同类型元素序列。
  1. 泛型 (Generics):
  • 虽然不是直接的对应概念,但Java和C#都支持泛型编程,允许类型安全地操作数据结构而不必使用类型强制转换。
  1. 委托 (Delegate) 和 事件 (Event):
  • 这些是C#特有的概念,类似于Java中的接口,但专门用于定义回调方法,特别是在事件驱动编程中。在Java中,通常使用接口和匿名内部类来实现类似的功能。
  1. 属性 (Property):
  • 在C#中,属性是类的成员,它封装了类的字段,并提供了一种访问这些字段的机制。这在C#中非常常见,而在Java中通常使用私有字段和公共的getter/setter方法来实现类似的功能。
  1. 结构体 (Struct):
  • 在C#中,struct 关键字用于定义一个简单的数据类型,类似于Java中的类,但它是值类型而不是引用类型。这在C#中是存在的,而在Java中没有直接对应的结构体概念(Java只有类)。

通过上述对比,可以看出Java和C#在面向对象编程的许多方面有着相似之处,尽管在某些具体语法和概念上存在

差异。了解这些差异有助于在两种语言之间进行代码迁移或开发时更加得心应手。

十三、参考链接

参考链接

相关推荐
張萠飛几秒前
Apache Doris中都用了哪些开发语言,编译过程中用到了哪些编译器,以及用到了哪些成熟的技术框架
开发语言·apache
功德+n3 分钟前
Apache POI详解
java·开发语言·maven·apache
牵牛老人27 分钟前
C++设计模式-工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析
开发语言·c++·设计模式
wangnaisheng39 分钟前
【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析
c#·wpf
蒋劲豪41 分钟前
WPF有哪些使用率高的框架
c#·wpf
wangnaisheng44 分钟前
【WPF】在System.Drawing.Rectangle中限制鼠标保持在Rectangle中移动?
c#·wpf
无难事者若执1 小时前
python LLM工具包
开发语言·python
rkmhr_sef2 小时前
QoS质量配置
开发语言·智能路由器·php
hrrrrb3 小时前
【C语言】数组篇
c语言·开发语言