Csharp 列表
列表的基本用法创建列表 123456// 创建空列表List<int> numbers = new List<int>();// 创建并初始化列表List<string> names = new List<string> { "Alice", "Bob", "Charlie" }; 添加元素 123numbers.Add(10); // 在末尾添加单个元素numbers.AddRange(new int[] { 20, 30 }); // 添加多个元素 访问元素 12int first = numbers[0]; // 通过索引访问(类似数组) 删除元素 1234numbers.Remove(20); // 删除第一个匹配的元素numbers.RemoveAt(0); // 删除指定索引的元素numbers.Clear(); // 清空列表 遍历列表 12345foreach...
Csharp 运算符重载
运算符重载(Operator Overloading)在 C# 中,运算符重载(Operator Overloading) 是一种允许你为自定义的类或结构体重新定义运算符行为的特性。通过运算符重载,你可以让自定义类型像内置类型(如 int、string)一样,直接使用 +、-、== 等运算符进行操作,使代码更简洁、直观。 核心要点目的让自定义类型支持运算符操作,提升代码可读性。例如,用 a + b 代替 a.Add(b)。 实现方式通过定义 public static 方法,并使用 operator 关键字声明要重载的运算符: 12复制public static 返回类型 operator 运算符(参数) { ... } 可重载的运算符算术运算符:+, -, *, /, % 比较运算符:==, !=, <, >, <=, >= 逻辑运算符:!,&, |, ^ 位运算符: < <,...
Csharp 索引器的使用
什么是索引器?索引器(Indexer)是 C# 中的一种特殊成员,允许对象像数组或集合一样通过索引(如 [])访问内部元素。 类似于属性(Property),但通过索引参数访问数据。 常用于封装集合类(如自定义列表、字典),使其可以通过索引直接操作元素。 如何定义和使用索引器?语法结构 1234567891011121314151617181920212223242526272829303132333435复制public 返回类型 this[参数类型 index]{ get { /* 返回 index 对应的值 */ } set { /* 设置 index 对应的值 */ }}示例代码csharp复制class StringCollection{ private string[] _data = new string[10]; // 定义索引器 public string this[int index] { get { ...
Csharp 虚方法和隐藏方法-抽象类和密封类
虚方法和隐藏方法虚方法(Virtual Method)定义在 C# 中,虚方法是在基类中使用virtual关键字修饰的方法。它允许派生类重写(override)该方法的实现。虚方法提供了一种多态性的机制,使得在运行时可以根据对象的实际类型来调用相应的方法。 示例 考虑一个简单的动物类层次结构。首先有一个基类Animal: 12345678910111213141516class Animal{ public virtual void MakeSound() { Console.WriteLine("The animal makes a sound."); }}然后有一个派生类Dog,它重写了MakeSound方法:csharpclass Dog : Animal{ public override void MakeSound() { Console.WriteLine("The dog barks."); ...
Csharp 继承
继承 在 C# 中,继承是面向对象编程的一个核心概念,它允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法,从而实现代码的复用和扩展。以下从多个方面详细介绍 C# 中的继承: 基本概念继承建立了类与类之间的一种 “is - a” 关系,即子类是父类的一种特殊类型。通过继承,子类可以拥有父类的成员(字段、属性、方法等),并且可以添加自己特有的成员或重写父类的成员以实现不同的行为。 语法示例 以下是一个简单的继承示例,展示了如何定义父类和子类: 1234567891011121314151617181920212223242526272829303132333435363738// 定义一个父类 Animalclass Animal{ public string Name { get; set; } public Animal(string name) { Name = name; } public void Eat() { ...
Csharp 堆栈和静态类型
堆栈和静态储区值类型和引用类型概念值类型: 值类型变量直接包含它们的数据。当你声明一个值类型变量时,这个变量本身存储了实际的值。例如,C# 中的基本数据类型(如int、double、bool等)都是值类型。如果有一个int变量num = 5;,变量num存储的就是数字5这个值。值类型在内存中的存储相对简单,通常存储在栈(Stack)上。 引用类型: 引用类型变量存储的是一个引用,这个引用指向存储数据的实际内存位置(通常是堆 - Heap)。例如,在 C# 中,类(Class)、接口(Interface)、委托(Delegate)等都是引用类型。当你创建一个类的对象时,例如MyClass myObj = new MyClass();,变量myObj存储的是指向MyClass对象在堆内存中实际存储位置的引用。 内存分配和管理值类型: 如前面提到的,值类型一般存储在栈上。当一个值类型变量进入作用域(例如在一个方法内部声明)时,它会在栈上分配内存,当变量离开作用域时,其占用的栈内存会被自动释放。例如: 1234567891011class...
Csharp 匿名类型
匿名类型定义在 C# 中,匿名类型是一种可以在不定义具体类型(如类)的情况下创建对象的方式。匿名类型提供了一种便捷的方法来封装一组只读属性,通常用于临时的数据存储和传递。 匿名类型的实例是由编译器自动生成的类型,其类型名对于开发者是不可见的。例如: 1var person = new { Name = "John", Age = 30 }; 这里创建了一个匿名类型的对象person,它有两个属性Name和Age。var关键字让编译器根据初始化表达式来推断变量的类型。 属性访问 可以通过对象实例来访问其属性。例如,对于上面的person对象,可以这样访问属性: 12Console.WriteLine(person.Name); Console.WriteLine(person.Age); 由于匿名类型的属性是只读的,不能对其进行重新赋值。例如,下面的代码是错误的: 1person.Name = "Jane"; // 编译错误,因为匿名类型的属性是只读的 用途LINQ 查询结果的临时存储:在...
Csharp 构造函数的使用,this关键字
构造函数什么是构造函数?定义在 C# 中,构造函数是一种特殊的方法,它与类同名,并且没有返回类型(甚至不能是 void)。构造函数主要用于在创建类的对象时初始化对象的状态。例如,当你创建一个Person类的对象时,可以使用构造函数来初始化Person对象的姓名、年龄等属性。 默认构造函数如果一个类中没有定义任何构造函数,C# 编译器会自动提供一个默认构造函数。这个默认构造函数没有参数,并且它的作用是初始化对象的成员变量为它们的默认值(例如,数值类型为 0,引用类型为null)。 例如: 123456789101112class MyClass{ int myVariable;}class Program{ static void Main() { MyClass obj = new MyClass(); // 此时obj.myVariable的值为0 ...
Csharp public与private说明 set-get方法
set-get方法的使用在 C# 中,get 和 set 主要用于定义属性(Property),属性是一种用于封装字段(Field)的成员,它提供了对字段的访问控制,使得可以更安全、更方便地读取和修改字段的值。以下是关于 get 和 set 的详细介绍: 1. 属性的基本概念 属性结合了字段和方法的优点,从外部看它就像一个字段,可以像访问字段一样访问属性;但在内部,它通过 get 和 set 访问器来控制对字段的读写操作。 2. 完整属性定义(包含 get 和 set) 123456789101112131415161718192021222324252627282930313233class Person{ // 私有字段,用于存储数据 private string _name; // 公共属性,用于封装 _name 字段 public string Name { get { // get 访问器用于获取属性的值 return _name; ...
Csharp类的定义和使用
类的定义在 C# 中,类是一种用户定义的数据类型,它是面向对象编程的基本构建块。类用于封装数据(通过字段)和行为(通过方法)。定义一个类的基本语法如下: 1234class ClassName{ // 类的成员(字段、方法、属性等)} 例如,定义一个简单的Person类: 12345678910class Person{ // 字段,用于存储人的姓名 public string Name; // 方法,用于打印问候语 public void SayHello() { Console.WriteLine($"Hello, my name is {Name}."); ...