C# 正则表达式
在C#中,正则表达式是通过System.Text.RegularExpressions命名空间提供的。以下是一些基本的正则表达式用法:1. Regex.Match 方法: using System; using System.Text.RegularExpressions; class Program { static void Main() { string input = "Hello, 12345"; string pattern = @"\d+"; // 匹配数字 Match match = Regex.Match(input, pattern); if (match.Success) { Console.WriteLine("Match: " + match.Value); } } }2. Regex.IsMatch...
C# 预处理器指令
C# 中的预处理器指令是在编译过程中由预处理器处理的一些命令,它们用于在编译时执行一些特定的操作。以下是一些常见的 C# 预处理器指令:1. #define 和 #undef: - #define 用于定义一个符号,可以在整个代码文件中启用或禁用与该符号相关的代码块。 - #undef 用于取消定义之前定义过的符号。 #define DEBUG // 或者 //#undef DEBUG2. #if、#else、#elif 和 #endif: - #if 用于条件编译,根据指定的条件编译代码块。 - #else 用于在前一个条件不满足时执行的代码块。 - #elif 用于在前一个条件不满足时检查新的条件。 - #endif 用于结束条件编译块。 #if DEBUG Console.WriteLine("Debug version"); #else Console.WriteLine("Release version"); #endif3. #warning 和 #error: ...
C# 命名空间(Namespace)
在C#中,命名空间(Namespace)是一种用于组织和管理代码的方式。命名空间可以包含类、结构、接口、枚举和其他命名空间,帮助在大型项目中防止命名冲突,并提供更好的代码组织和可维护性。以下是一个简单的例子:// 命名空间的定义namespace MyNamespace{ // 类的定义 public class MyClass { public void MyMethod() { Console.WriteLine("MyMethod is called."); } } // 另一个类的定义 public class AnotherClass { public void AnotherMethod() { Console.WriteLine("AnotherMethod is called."); } }}class Program{ static void Mai...
C# 接口(Interface)
在C#中,接口(Interface)是一种定义了一组方法、属性、索引器和事件的结构。接口提供了一种将相关的功能合并到一起的方式,而无需引入类的继承。类可以实现一个或多个接口,从而获得这些接口定义的功能。以下是一个简单的接口示例:using System;// 定义一个简单的接口public interface IDrawable{ void Draw();}// 实现接口的类public class Circle : IDrawable{ public void Draw() { Console.WriteLine("Drawing a circle"); } // Circle 类可以有自己的其他成员}public class Square : IDrawable{ public void Draw() { Console.WriteLine("Drawing a square"); } // Square 类可以有自己的其他成员}class Program{ ...
C# 运算符重载
在C#中,运算符重载允许你自定义类对象的运算符行为。通过重载运算符,你可以定义类的实例之间如何进行加法、减法、相等性比较等操作。以下是一个简单的示例,演示了如何在自定义类中重载加法运算符:using System;public class ComplexNumber{ public double Real { get; set; } public double Imaginary { get; set; } public ComplexNumber(double real, double imaginary) { Real = real; Imaginary = imaginary; } // 重载加法运算符 public static ComplexNumber operator +(ComplexNumber a, ComplexNumber b) { return new ComplexNumber(a.Real + b.Real, a.Imaginary + b.Imaginary); ...
C# 多态性
在C#中,多态性是面向对象编程的一个重要概念,允许使用相同的接口来处理不同的对象类型。有两种主要的多态性:编译时多态性(也称为静态多态性)和运行时多态性(也称为动态多态性)。1. 编译时多态性: 编译时多态性是通过方法的重载和接口实现来实现的。方法的重载允许在同一个类中定义多个同名方法,但参数类型或数量不同。接口实现允许不同的类实现相同的接口,从而使它们能够以相似的方式被使用。 // 编译时多态性示例 class MathOperations { public int Add(int a, int b) { return a + b; } public double Add(double a, double b) { return a + b; } } interface ILogger { void Log(string message); } class ConsoleLogger : ILogger { p...
C# 继承
在C#中,继承是一种面向对象的概念,允许一个类(子类/派生类)使用另一个类(父类/基类)的属性和方法。这有助于代码重用和建立类之间的层次结构。下面是一个简单的C#继承的例子:using System;// 定义一个基类public class Animal{ // 基类的字段 public string Name { get; set; } // 基类的方法 public void Eat() { Console.WriteLine($"{Name} is eating."); }}// 定义一个派生类(子类)public class Dog : Animal{ // 子类可以新增字段 public string Breed { get; set; } // 子类可以覆盖基类的方法 public new void Eat() { Console.WriteLine($"{Name} the {Breed} is eating."); } //...
C# 类(Class)
C# 中的类(Class)是一种用于创建对象的蓝图或模板。类定义了对象的属性(字段)和行为(方法)。以下是一个简单的 C# 类的例子:using System;// 定义一个简单的类public 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."); }}class Program{ static void Main() { // 创建一个 Person 对象 Person person1 = new Person(); // 设置对象的属性 person1.Name = "John"; ...
C# 枚举(Enum)声明与使用
在 C# 中,枚举(Enum)是一种用于定义命名常量的值类型。它为一组有限的命名整数值提供了一个命名的标识符。以下是关于 C# 枚举的基本概念和使用教程:1. 枚举的声明:// 声明一个简单的枚举public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}在上面的例子中,Days 枚举包含了一周中的每一天,并使用默认的整数值(0 到 6)进行初始化。你也可以手动为每个枚举成员指定值:public enum Days{ Sunday = 1, Monday = 2, Tuesday = 3, Wednesday = 4, Thursday = 5, Friday = 6, Saturday = 7}2. 枚举的使用:// 使用枚举Days today = Days.Wednesday;// 输出枚举值Console.WriteLine($"Today is {today}");// 将...
C# 结构(Struct)
在 C# 中,结构(Struct)是一种用户定义的值类型,用于组织和存储相关数据。结构与类(Class)相似,但有一些关键区别。以下是关于 C# 结构的基本概念和使用教程:1. 结构的声明:// 声明一个结构public struct Point{ public int X; public int Y;}2. 结构的实例化:// 实例化结构Point p1 = new Point();p1.X = 10;p1.Y = 20;// 使用对象初始化器实例化结构Point p2 = new Point { X = 5, Y = 15 };3. 结构的使用:// 访问结构的成员Console.WriteLine($"Point 1: ({p1.X}, {p1.Y})");Console.WriteLine($"Point 2: ({p2.X}, {p2.Y})");// 结构之间的赋值是值拷贝Point p3 = p1;p3.X = 100;Console.WriteLine($"Point 1: ({p1.X}, {p1.Y})&...
C# 字符串(String)使用教程
在 C# 中,字符串(String)是一种表示文本的数据类型。字符串是不可变的,这意味着一旦创建,就不能更改其内容。以下是一些关于 C# 字符串的基本操作和使用教程:1. 字符串的声明和初始化:// 声明一个字符串string myString;// 初始化一个字符串myString = "Hello, C#!";// 直接声明并初始化string anotherString = "Welcome to C#!";2. 字符串的连接:可以使用 + 运算符来连接字符串。string firstName = "John";string lastName = "Doe";string fullName = firstName + " " + lastName; // "John Doe"3. 字符串的插值:使用字符串插值来嵌入变量的值。string name = "Alice";int age = 25;string message = $"M...
C# 数组(Array)声明与使用
在 C# 中,数组(Array)是一种用于存储相同类型元素的数据结构。数组的声明和使用涉及到指定数组类型、数组名称和数组大小等操作。以下是一些关于 C# 数组的基本操作:1. 数组的声明:// 声明一个整数数组int[] myArray;// 声明并初始化一个字符串数组string[] stringArray = new string[5];2. 数组的初始化:数组可以在声明时直接初始化,也可以在后续的代码中进行初始化。// 直接初始化整数数组int[] myNumbers = { 1, 2, 3, 4, 5 };// 初始化字符串数组string[] daysOfWeek = new string[] { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };3. 访问数组元素:数组的元素通过索引进行访问,索引从 0 开始。int[] myNu...
C# 可空类型(Nullable)说明
在 C# 中,可空类型(Nullable Types)是一种特殊的数据类型,它允许变量存储正常范围内的数据值或一个特殊的 null 值。通常,值类型(例如 int、double、bool 等)不能为 null,但是通过使用可空类型,你可以在值类型中包含 null 值。为什么需要可空类型?在某些情况下,你可能需要一个值类型能够表示未知或无效的状态,而不仅仅是范围内的值。这时可空类型就非常有用,因为它们允许值类型的变量取得 null 值。使用可空类型:可空类型的声明方式是在值类型后加上 ? 符号。例如,int? 表示一个可空的整数。int? nullableInt = null;判断可空类型是否为 null:if (nullableInt.HasValue){ // 可空类型有值,可以通过 .Value 获取其值 int value = nullableInt.Value;}else{ // 可空类型为 null}或者可以使用空值合并运算符 ?? 来提供一个默认值:int value = nullableInt ?? defaultValue;可空类型的方法:可空类型提供...
C# 方法
在 C# 中,方法是一组执行特定任务的代码块。方法可以包含在类中,也可以作为独立的函数存在。以下是 C# 中定义和使用方法的基本概念:1. 方法的定义:public class MyClass{ // 无参数无返回值的方法 public void SimpleMethod() { // 方法体 Console.WriteLine("This is a simple method."); } // 带参数的方法 public void MethodWithParameters(int x, int y) { int result = x + y; Console.WriteLine($"The result is: {result}"); } // 带返回值的方法 public int MethodWithReturnValue(int a, int b) { return a * b; }}2. 方法的调用...
C# 封装
封装是面向对象编程(OOP)中的一个重要概念,它指的是将一个对象的状态(数据)和行为(方法)包装在一个单一的单元中,并限制对内部细节的直接访问。在 C# 中,封装通过使用访问修饰符和属性(Properties)来实现。以下是 C# 中封装的基本概念:1. 访问修饰符: public: 对象的所有代码块都可以访问。 private: 只有同一类中的代码块可以访问。 protected: 只有同一类或派生类中的代码块可以访问。 internal: 只有同一程序集中的代码块可以访问。 protected internal: 只有同一程序集中的代码块或派生类中的代码块可以访问。public class MyClass{ public int PublicField; // 公共字段,可以被外部代码直接访问 private int privateField; // 私有字段,只能在同一类中访问 protected int protectedField; // 受保护字段,可以在同一类或派生类中访问 internal int internalField; // 内部字段,可...
C# 循环
在 C# 中,有几种常见的循环结构,用于重复执行一段代码。以下是 C# 中的主要循环结构:1. for 循环:for 循环用于按照指定的条件重复执行一段代码,通常用于知道循环次数的情况。for (int i = 0; i < 5; i++){ Console.WriteLine(i);}2. while 循环:while 循环用于在给定条件为真时重复执行一段代码,适用于未知循环次数的情况。int i = 0;while (i < 5){ Console.WriteLine(i); i++;}3. do-while 循环:do-while 循环与 while 循环类似,但是它首先执行一次代码块,然后检查条件。int i = 0;do{ Console.WriteLine(i); i++;} while (i < 5);4. foreach 循环:foreach 循环用于遍历集合或数组中的元素,无需显式地管理迭代变量。int[] numbers = { 1, 2, 3, 4, 5 };foreach (int number in number...
C# 判断
在 C# 中,常见的判断结构包括条件语句和循环语句。以下是一些用于判断的关键字和结构:1. 条件语句:if 语句:int x = 10;if (x > 5){ Console.WriteLine("x is greater than 5");}else if (x == 5){ Console.WriteLine("x is equal to 5");}else{ Console.WriteLine("x is less than 5");}switch 语句:int dayOfWeek = 3;switch (dayOfWeek){ case 1: Console.WriteLine("Monday"); break; case 2: Console.WriteLine("Tuesday"); break; // ... 其他情况 default: Console.Wr...
C# 运算符
C# 提供了多种运算符,用于执行各种操作,包括算术运算、关系运算、逻辑运算等。以下是一些常见的 C# 运算符:1. 算术运算符:int a = 10;int b = 5;int sum = a + b; // 加法int difference = a - b; // 减法int product = a * b; // 乘法int quotient = a / b; // 除法int remainder = a % b; // 取余2. 关系运算符:int x = 10;int y = 20;bool isEqual = (x == y); // 等于bool notEqual = (x != y); // 不等于bool greaterThan = (x > y); // 大于bool lessThan = (x < y); // 小于bool greaterOrEqual = (x >= y); // 大于等于bool lessOrEqual = (x <= y); // 小于等于3. 逻辑运算符:bool condition1 = true;bool ...
C# 常量
在 C# 中,常量是在程序执行期间其值不能被改变的标识符。使用 const 关键字来声明常量。下面是一些关于 C# 常量的基本信息:声明和初始化常量:const double Pi = 3.14;const int DaysInWeek = 7;在上述例子中,Pi 和 DaysInWeek 被声明为常量,它们的值不能在程序的执行过程中被修改。常量的值必须在声明时进行初始化。常量的特性:1. 不可更改: 常量的值在编译时确定,并且不能在程序执行期间更改。2. 编译时替换: 在编译时,所有对常量的引用都会被替换为常量的实际值。常量的使用场景:1. 提高代码的可读性: 常量提供了对代码中的字面值进行命名的机制,从而提高了代码的可读性。 const int MaxAttempts = 3;2. 避免魔法数值: 使用常量来代替代码中的魔法数值,使得代码更容易理解和维护。 const double Pi = 3.14;常量 vs 只读字段:除了使用 const 关键字创建常量外,还可以使用 readonly 关键字创建只读字段。主要的区别在于: 常量在编译时就被解析,而只读字段在运行时才被...
C# 变量
在 C# 中,变量是用于存储数据的命名内存位置。每个变量都有一个特定的数据类型,决定了变量可以存储的数据类型和范围。以下是一些关于 C# 变量的基本概念:变量的声明和初始化:在 C# 中,变量的声明和初始化可以分开,也可以一起进行。声明一个变量时,需要指定变量的数据类型。// 只声明变量int myVariable;// 声明并初始化变量int anotherVariable = 10;// 同时声明多个变量int x, y, z;变量的命名规则: 变量名必须以字母、下划线或 @ 符号开头。 后续字符可以包含字母、数字、下划线或 @ 符号。 C# 是大小写敏感的,因此变量名中的大小写会被区分。int myVariable;double MyVariable; // 不同于上面的变量名,大小写不同变量的赋值和使用:int myAge; // 声明变量myAge = 25; // 赋值// 使用变量Console.WriteLine("My age is: " + myAge);变量的作用域:变量的作用域定义了变量在程序中的可见性和生命周期。在 C# 中,变量的作用域通...