接口属于抽象特性
//接口不能直接实例化,只能通过实现它的类或结构体来使用
//一个类或结构体可以实现多个接口
//接口中的成员是抽象的,不能提供具体的实现
//核心用途:只需定义行为规范,不需要提供具体实现的时候
结构体"属于值类型,常用来表示轻量化数据,例如:颜色,坐标点
* 内存在栈中,代表具体的数值
* 结构体不能定义显示无参构造函数,默认只能使用编辑器提供的
* 结构体不能继承其他类或其他结构体,但可以实现接口继承
类
* 类属于引用类型,用于定义对象结构和行为特征
* 内存在堆,由引用的意义
* 可以继承其他类,支持多态(有虚方法和重写)
* 可以定义无参构造函数,有参构造函数,和析构函数
* 类包含了字段,属性,方法,索引器,事件等
* 封装的概念在类中比较好体现
* 主要用途:有复杂的数据结构或行为,需要继承或多态特性,封装的需求
泛型
* 泛型类属于一种特殊的类,使用类型参数来定义类的结构和行为,主要用途是提高代码的复用度和类型安全
* 特点:泛型类在定义类型参数的时候需要用别名T之类的字符代替类型
* 好处是避免类型转换错误
* 避免装箱或拆箱操作
*
*用途:支持用户自定义数据,对数据安全有要求的时候
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _3.泛型与类和结构的比较
{internal class Program{static void Main(string[] args){//接口(interface)结构体(struct) 类(class) 泛型:(Generic)//继承抽象的类Animal a1= new Animal();a1.Name = "朕";a1.Eat();//结构体Point p1 = new Point(10,20);p1.Print();//类Person pe = new Person(10, "秀秀");pe.Print();//泛型GenericBox<int> box = new GenericBox<int>(15);Console.WriteLine(box.getContent());box.setContent(20);Console.WriteLine(box.getContent());}}//接口属于抽象特性public interface IAnimal{//接口不能直接实例化,只能通过实现它的类或结构体来使用//一个类或结构体可以实现多个接口//接口中的成员是抽象的,不能提供具体的实现void Eat();//定义方法string Name { get; set; }//定义属性//核心用途:只需定义行为规范,不需要提供具体实现的时候 }public class Animal : IAnimal{public string Name { get; set; }public void Eat(){Console.WriteLine($"我叫{Name}");}}//结构体"属于值类型,常用来表示轻量化数据,例如:颜色,坐标点public struct Point{/** 内存在栈中,代表具体的数值* 结构体不能定义显示无参构造函数,默认只能使用编辑器提供的* 结构体不能继承其他类或其他结构体,但可以实现接口继承* */public int X { get; set; }public int Y { get; set; }public Point(int x, int y){X = x;Y = y;}public void Print(){Console.WriteLine($"{X},{Y}");}}//类public class Person{/** 类属于引用类型,用于定义对象结构和行为特征* 内存在堆,由引用的意义* 可以继承其他类,支持多态(有虚方法和重写)* 可以定义无参构造函数,有参构造函数,和析构函数* 类包含了字段,属性,方法,索引器,事件等* 封装的概念在类中比较好体现* * 主要用途:有复杂的数据结构或行为,需要继承或多态特性,封装的需求*/public int Id { get; set; }public string Name { get; set; }public Person(int id, string name){Id = id;Name = name;}public void Print(){Console.WriteLine($"{Id},{Name}");}}public class GenericBox<T>{/** 泛型类属于一种特殊的类,使用类型参数来定义类的结构和行为,主要用途是提高代码的复用度和类型安全* * 特点:泛型类在定义类型参数的时候需要用别名T之类的字符代替类型* 好处是避免类型转换错误* 避免装箱或拆箱操作* *用途:支持用户自定义数据,对数据安全有要求的时候*/public T Content { get; set; }//属性public GenericBox(T content)//构造函数{Content = content;}public T getContent()//方法{return Content;}public void setContent(T content)//方法{ this.Content = content; }}}