当前位置: 首页 > news >正文

C# --- 深入学习类(class)

       类是面向对象编程(OOP)的核心概念之一,它允许用户定义自己的数据类型,并为这些数据类型指定属性和行为。类是一种引用类型,这意味着类实例(对象)存储在堆内存中,并通过引用进行访问。

4.1 主要特点

4.1.1 引用类型:类的实例存储在堆内存中,变量保存的是对象的引用(内存地址),而不是对象本身。

4.1.2 封装:类可以封装数据(属性)和操作数据的方法(行为)。

4.1.3 继承:类支持继承,允许创建新的类从现有的类继承属性和行为。

4.1.4 多态:通过继承和接口实现多态性。

4.1.5 构造函数:类可以有一个或多个构造函数,用于在创建对象时初始化对象。

4.2 定义和使用类

4.2.1 定义类

    一个简单的类的定义包括属性、方法和构造函数:

public class Person
{// 属性public string Name { get; set; }public int Age { get; set; }// 构造函数public Person(string name, int age){Name = name;Age = age;}// 方法public void DisplayInfo(){Console.WriteLine($"Name: {Name}, Age: {Age}");}
}

4.2.2 使用类

    创建类的实例(对象)并调用其方法:

public class Program
{public static void Main(){// 创建类的实例Person person = new Person("Alice", 30);// 调用方法person.DisplayInfo(); // 输出: Name: Alice, Age: 30}
}

4.3 类的主要特性

4.3.1 引用类型

> 类的实例存储在堆内存中。

> 变量保存的是对象的引用(内存地址)。

> 赋值一个类对象变量给另一个变量时,两个变量引用同一个对象

Person person1 = new Person("Alice", 30);

Person person2 = person1;

person2.Name = "Bob";

Console.WriteLine(person1.Name); // 输出: Bob\

4.3.2 封装(Encapsulation)

> 通过属性和方法封装数据和行为。

> 使用访问修饰符(如 public、private、protected)控制对类成员的访问。

public class Person
{private string name;public string Name{get { return name; }set { name = value; }}public void DisplayInfo(){Console.WriteLine($"Name: {Name}");}
}public class Program
{public static void Main(){Person person = new Person();person.Name = "Alice"; // 通过属性设置 nameperson.DisplayInfo(); // 输出: Name: Alice}
}

4.3.3 继承(Inheritance)

> 通过继承实现代码重用和扩展。

> 派生类继承基类的属性和方法,并可以添加新的成员或重写基类成员。

public class Person
{public string Name { get; set; }public int Age { get; set; }public Person(string name, int age){Name = name;Age = age;}public void DisplayInfo(){Console.WriteLine($"Name: {Name}, Age: {Age}");}
}public class Employee : Person
{public int EmployeeId { get; set; }public Employee(string name, int age, int employeeId) : base(name, age){EmployeeId = employeeId;}public void DisplayEmployeeInfo(){DisplayInfo();Console.WriteLine($"Employee ID: {EmployeeId}");}}public class Program
{public static void Main(){Employee employee = new Employee("Alice", 30, 1234);employee.DisplayEmployeeInfo(); // 输出: Name: Alice, Age: 30; Employee ID: 1234}
}

4.3.4 多态(Polymorphism)

> 通过继承和接口实现多态性。相同的方法调用可以有不同的行为。

public class Person
{public string Name { get; set; }public int Age { get; set; }public Person(string name, int age){Name = name;Age = age;}public void DisplayInfo(){Console.WriteLine($"Name: {Name}, Age: {Age}");}
}public class Employee : Person
{public int EmployeeId { get; set; }public Employee(string name, int age, int employeeId) : base(name, age){EmployeeId = employeeId;}public void DisplayEmployeeInfo(){DisplayInfo();Console.WriteLine($"Employee ID: {EmployeeId}");}
}public class Program
{public static void Main(){Employee employee = new Employee("Alice", 30, 1234);employee.DisplayEmployeeInfo(); // 输出: Name: Alice, Age: 30; Employee ID: 1234}
}

4.3.5 抽象(Abstraction)

抽象是将对象的复杂性隐藏起来,只向外界公开必要的部分。抽象类和接口是实现抽象的两种方式。

public abstract class Shape
{public abstract double GetArea(); // 抽象方法,没有实现
}public class Circle : Shape
{public double Radius { get; set; }public Circle(double radius){Radius = radius;}public override double GetArea(){return Math.PI * Radius * Radius;}
}public class Program
{public static void Main(){Shape myCircle = new Circle(5);Console.WriteLine("Area: " + myCircle.GetArea()); // 输出: Area: 78.53981633974483}
}


http://www.mrgr.cn/news/5885.html

相关文章:

  • Python生成JMeter测试脚本----生成测试脚本并运行
  • Java ArrayList和LinkedList
  • 如何把huggingface格式的whisper模型转为openai格式
  • Git克隆仓库太大导致拉不下来的解决方法 fatal: fetch-pack: invalid index-pack output
  • HDFS回收站-删除策略详解
  • 自动控制——用描述函数法分析非线性系统的稳定性与自激振荡
  • 健康减调攻略:1月轻松掉十斤
  • 设计模式 - 责任链模式
  • 探索tailwindcss多主题切换
  • 在线文档翻译免费的有哪些?翻译达人必备工具
  • 数据在内存中的存储
  • Linux入门——11 线程
  • Flutter->`Flutter` 通过`ffi`调用`Rust`编译生成的产物.so文件(Android)和.a文件(iOS)接口方法
  • Focal Loss详解及其pytorch实现
  • Vue.js:从入门到进阶
  • 扫描包得到所有Bean的Class对象
  • Linux 信号 signal,sigaction,sigqueue,kill,相关函数
  • uni-app02
  • 安装 podman 与 podman-compose
  • SQL关键字检测持续优化,太难了