C#:泛型与类和结构的比较(接口,结构体,类,泛型)
接口属于抽象特性
//接口不能直接实例化,只能通过实现它的类或结构体来使用
//一个类或结构体可以实现多个接口
//接口中的成员是抽象的,不能提供具体的实现
//核心用途:只需定义行为规范,不需要提供具体实现的时候
结构体"属于值类型,常用来表示轻量化数据,例如:颜色,坐标点
* 内存在栈中,代表具体的数值
* 结构体不能定义显示无参构造函数,默认只能使用编辑器提供的
* 结构体不能继承其他类或其他结构体,但可以实现接口继承
类
* 类属于引用类型,用于定义对象结构和行为特征
* 内存在堆,由引用的意义
* 可以继承其他类,支持多态(有虚方法和重写)
* 可以定义无参构造函数,有参构造函数,和析构函数
* 类包含了字段,属性,方法,索引器,事件等
* 封装的概念在类中比较好体现
* 主要用途:有复杂的数据结构或行为,需要继承或多态特性,封装的需求
泛型
* 泛型类属于一种特殊的类,使用类型参数来定义类的结构和行为,主要用途是提高代码的复用度和类型安全
* 特点:泛型类在定义类型参数的时候需要用别名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;
}
}
}