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

ops/2025/3/10 11:35:00/

目录

一、前言

二、using 关键字

三、class 关键字

四、C# 中的注释

五、成员变量

六、成员函数

七、实例化一个类

八、标识符

九、C# 关键字

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

实例一

实例二

实例三

注意事项

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

1. 命名空间与包

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

3. 类成员的访问控制

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

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#在面向对象编程的许多方面有着相似之处,尽管在某些具体语法和概念上存在

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

十三、参考链接

参考链接

  • java与c#的语法区别详细介绍

http://www.ppmy.cn/ops/164646.html

相关文章

10.2 继承与多态

文章目录 继承多态 继承 继承的作用是代码复用。派生类自动获得基类的除私有成员外的一切。基类描述一般特性,派生类提供更丰富的属性和行为。在构造派生类时,其基类构造函数先被调用,然后是派生类构造函数。在析构时顺序刚好相反。 // 基类…

【AVRCP】协议深入解析(1):从框架到数据单元

目录 一、AVRCP 协议框架 1.1 AV/C 命令 1.2 AVRCP 特定的 AV/C 命令 1.3 AVRCP 特定的浏览命令 二、定时器设置 三、协议数据单元(PDU)描述 3.1 PDU 格式概述 3.2 AVRCP 特定的 AV/C PDU 格式 3.3 AVRCP 特定的浏览 PDU 格式 四、总结 五、参考文献 AVRCP(Audio…

让知识触手可及!基于Neo4j的机械设备知识图谱问答系统

让知识触手可及!基于Neo4j的机械设备知识图谱问答系统 在信息化迅速发展的今天,我们如何高效地利用海量数据?我们推出的“机械设备知识图谱问答展示系统”,正是为了解决这个难题而生。这个系统不仅能帮助我们快速获取机械设备的知…

介绍一下Qt中的动态属性

在 Qt 中,动态属性是一种强大且灵活的特性,它允许你在运行时为对象添加、修改和查询属性,而不需要在类的定义中预先声明这些属性。下面为你详细介绍 Qt 动态属性的相关内容: 1. 动态属性的基本概念 在传统的 C 类中,属…

用Python写一个算24点的小程序

一、运行界面 二、显示答案——递归介绍 工作流程&#xff1a; 1. 基本情况&#xff1a;函数首先检查输入的数字列表 nums 的长度。如果列表中只剩下一个数字&#xff0c;它会判断这个数字是否接近 24&#xff08;使用 abs(nums[0] - 24) < 1e-10 来处理浮点数精度问题&…

Linux 配置静态 IP

一、简介 在 Linux CentOS 系统中默认动态分配 IP 地址&#xff0c;每次启动虚拟机服务都是不一样的 IP&#xff0c;因此要配置静态 IP 地址避免每次都发生变化&#xff0c;下面将介绍配置静态 IP 的详细步骤。 首先先理解一下动态 IP 和静态 IP 的概念&#xff1a; 动态 IP…

DeepSeek 开源周回顾「GitHub 热点速览」

上周&#xff0c;DeepSeek 发布的开源项目用一个词形容就是&#xff1a;榨干性能&#xff01;由于篇幅有限&#xff0c;这里仅列出项目名称和简介&#xff0c;感兴趣的同学可以前往 DeepSeek 的开源组织页面&#xff0c;深入探索每个项目的精彩之处&#xff01; 第一天 FlashML…

RK Android14 应用打开蓝牙时去掉确认提示

文章目录 需求解决 需求 在应用进行打开蓝牙操作时&#xff0c;不弹出确认提示&#xff0c;直接默认通过。 解决 路径&#xff1a;packages/apps/Settings/src/com/android/settings/bluetooth/RequestPermissionActivity.java diff --git a/packages/apps/Settings/src/com…