Csharp基础入门
Csharp基础入门
C#的文件后缀是.cs
在一个解决方案中会有N个项目文件夹
在C#中,控制台输出的方式是调用System命名空间中的console类中的WriteLine()方法
System命名空间由.Net提供,有很多程序的基础功能
System.Console.WriteLine();// 在控制台中输出内容
System.Console.ReadLine();// 在控制台中输入内容
System.Console.ReadKey();// 从控制台读取用户输入的一个按键
在Rider中,输出内容的快捷键从sout变成cw了 😊
命名空间概念
在Java中,管理多个类的目录结构是包
,以package关键字声明
在C#中,管理多个类的目录结构是命名空间
,以namespace关键字声明
而在导入的过程中,Java使用import关键字导包
而C#使用using关键字导入命名空间
以类名作为文件名,以命名空间名作为目录结构名
命名规则差异
- 类名和接口名:
- C# 中的类名和接口名同样使用大写的首字母(PascalCase),例如:
MyClass
。 - C# 的类名通常以
.cs
扩展名保存。
- C# 中的类名和接口名同样使用大写的首字母(PascalCase),例如:
- 命名空间:
- C# 中的命名空间(Namespace)通常使用大写的首字母,例如:
MyCompany.MyApp
。 - 命名空间通常反映了公司或产品的名称结构。
- C# 中的命名空间(Namespace)通常使用大写的首字母,例如:
- 常量名:
- C# 中的常量名通常使用全大写,单词间用下划线分隔,例如:
MY_CONSTANT
。
- C# 中的常量名通常使用全大写,单词间用下划线分隔,例如:
- 字段名:
- 私有字段通常以下划线开头加驼峰命名法,例如:
_myField
。 - 公共属性(Property)通常使用驼峰命名法,首字母大写,例如:
MyProperty
。
- 私有字段通常以下划线开头加驼峰命名法,例如:
- 方法名:
- 在C#中方法名通常使用大写开头的驼峰命名方法,例如:
MyMethodName
。
- 在C#中方法名通常使用大写开头的驼峰命名方法,例如:
一些其他差异
- 包/命名空间的大小写:
- Java 中的包名通常全部小写,而 C# 中的命名空间可以使用大小写混合。
- 文件扩展名:
- Java 文件扩展名为
.java
,而 C# 文件扩展名为.cs
。
- Java 文件扩展名为
- 方法参数:
- 参数名通常使用小写字母开始的驼峰命名法,例如:
myParameter
。
- 参数名通常使用小写字母开始的驼峰命名法,例如:
变量
在C#中,var
关键字是一个类型推断关键字,它允许你在声明变量时省略变量的具体类型
编译器会根据变量的初始值自动推断出变量的类型
这使得代码更加简洁,尤其是在类型显而易见的情况下
注:在使用var进行变量声明时,不能不初始化改变量(延迟初始化)
var message = "Hello, World!"; // 类型为 string
var number = 42; // 类型为 int
var collection = new List<int>(); // 类型为 List<int>
var x; // 编译错误
x = 10; // 也不能这样写
数据类型
与Java的数据类型基本相同,C#也有基本数据类型与其包装类型
在C# 中多一个decimal类型,他比double的精度更高,更适用于金融类型数据的处理
decimal中文释义:十进制
需要注意的是,在不同的数据进行运算时,会默认进行隐式转换(有低类型到高类型的转换)
nullable(可空类型)
C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值
int? num1 = null;
int? num2 = 45;
double? num3 = new double?();
double? num4 = 3.14157;
bool? boolval = new bool?();
Null 合并运算符( ?? )
C# 中两个问号的作用是判断??
左边的对象是否为 null,如果不为 null 则使用??
左边的对象,如果为 null 则使用 ??
右边的对象
num3 = num1 ?? 5.34;
num3 = (num1 == null) ? 5.34 : num1;
string
在C# 中,字符串类是string,而Java是String
与Java相同,C#提供了很多有关于字符串操作的方法,而且这些常用方法的重载十分有用,在合适的场景填写合适的参数
插值字符串
这是C#提供的一个语法糖,其语法为:
var name = "xiaobai";
var str = $"hello, my name is {name}";
Split方法
选用分隔符,对字符串进行分割
var message = "Hello world";
string[] strings = message.Split(" ");
IndexOf方法
输出指定字符在字符串中的索引值
var message = "Hello world";
var indexOf = message.IndexOf(" "); // 5
Join方法
我们可以使用Join方法对字符串数组进行拼接操作
// 示例 1: 使用逗号作为分隔符
string[] fruits = { "Apple", "Banana", "Cherry" };
string result = string.Join(", ", fruits);
Console.WriteLine(result); // 输出 "Apple, Banana, Cherry"
// 示例 2: 使用换行符作为分隔符
string result2 = string.Join("\n", fruits);
Console.WriteLine(result2);
// 输出
// Apple
// Banana
// Cherry
// 示例 3: 使用自定义分隔符
string customSeparator = " | ";
string result3 = string.Join(customSeparator, fruits);
Console.WriteLine(result3); // 输出 "Apple | Banana | Cherry"
然而,在不同的操作系统中,换行符是不同的,所以我们可以使用System.Enviroment提供的只读属性(并非一个方法)NewLine来作为换行符使用
string result2 = string.Join(Environment.NewLine, fruits);
路径拼接
在开发过程中,我们需要对文件路径的字符串变量进行路径拼接,而在不同系统情况下,路径拼接的连接符是不一样的
为了解决这个问题,我们使用Path.Combine方法进行路径拼接
var dir1 = "Folder";
var dir2 = "SubFolder";
var fn = "readme.md";
Path.Combine(dir1,dir2,fn);
构造函数
通过构造函数,填写指定的参数可以实现一些意想不到的功能
string sep = new string("=" , 20); // 打印20个=以完成换行符功能
char[] chars = ['h','e','l','l','o'];
string str = new string(chars); // 以字符数组作为参数可实现字符串的拼接
字符串比较
string message1 = "hellow world!";
string message2 = "hellow world?";
message1.CompareTo(message2); // 比较出大小,判断ASCII码
message1.Equals(message2); // 单纯判断是否相等,性能更好