目录
一、关于泛型
1.泛型定义
2.泛型与非泛型的区别
3.泛型的应用
(1)泛型类:
(2)泛型方法:
(3)泛型委托:
(4)泛型接口:
(5)泛型约束:
二、实例
一、关于泛型
1.泛型定义
泛型编程是一种编程方式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。泛型是用于处理算法、数据结构的一种编程方法。泛型的目标是采用广泛适用和可交互性的形式来表示算法和数据结构,以使它们能够直接用于软件构造。泛型类、结构、接口、委托和方法可以根据它们存储和操作的数据类型来进行参数化。
2.泛型与非泛型的区别
泛型能在编译时提供强大的类型检查,减少数据类型之间的显示转换、装箱操作和运行时的类型检查等。泛型类和泛型方法同时具备可重用性、类型安全和效率高等特性,这是非泛型类和非泛型方法无法具备的。
3.泛型的应用
泛型类、结构、接口、委托和方法可以根据它们存储和操作的数据类型来进行参数化。泛型通常用在集合和在集合上运行的方法中。
泛型是C#编程中一种强大的功能,它允许创建可以处理多种类型的数据的通用类、方法和函数。泛型是在C# 2.0中引入的,它提供了一种类型安全的方式,可以在不牺牲性能的情况下重用代码。
泛型的主要优点是它可以在编译时检查类型安全,避免了运行时类型转换错误。它还可以提高代码的可读性和可重用性。以下是C#中使用泛型的一些示例:
(1)泛型类:
public class MyClass<T>
{
private T _value;
public MyClass(T value)
{
_value = value;
}
public T GetValue()
{
return _value;
}
}
(2)泛型方法:
public static T Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
(3)泛型委托:
public delegate T MyGenericDelegate<T>(T input);
(4)泛型接口:
public interface IMyGenericInterface<T>
{
void DoSomething(T value);
}
(5)泛型约束:
public class MyClass<T> where T : struct
{
// ...
}
在上面的示例中,T是一个类型参数,它可以在创建类、方法或函数时指定。通过使用泛型,我们可以创建可以处理不同类型的数据的通用代码,而不需要为每种类型编写特定的代码。
二、实例
本实例将使用泛型存储不同类型的数据,在实现时,首先定义一个泛型类,并在泛型类中定义多个泛型变量;然后使用这些变量记录不同类型的数据,这样就可以重复利用泛型变量来存储不同类型的数据。本实例用来通过泛型获取员工信息并显示。
// 通过泛型获取员工信息并显示
namespace _126
{
public partial class Form1 : Form
{
private GroupBox? groupBox1;
private Button? button1;
private TextBox? textBox6;
private TextBox? textBox5;
private TextBox? textBox4;
private Label? label6;
private Label? label5;
private Label? label4;
private Label? label1;
private Label? label2;
private Label? label3;
private TextBox? textBox1;
private TextBox? textBox2;
private TextBox? textBox3;
public Form1()
{
InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;
Load += Form1_Load;
}
private void Form1_Load(object? sender, EventArgs e)
{
//
// label1
//
label1 = new Label
{
AutoSize = true,
Location = new Point(15, 19),
Name = "label1",
Size = new Size(44, 17),
TabIndex = 1,
Text = "编号:"
};
//
// label2
//
label2 = new Label
{
AutoSize = true,
Location = new Point(15, 51),
Name = "label2",
Size = new Size(44, 17),
TabIndex = 2,
Text = "性别:"
};
//
// label3
//
label3 = new Label
{
AutoSize = true,
Location = new Point(15, 83),
Name = "label3",
Size = new Size(44, 17),
TabIndex = 3,
Text = "生日:"
};
//
// textBox1
//
textBox1 = new TextBox
{
Location = new Point(64, 13),
Name = "textBox1",
Size = new Size(100, 23),
TabIndex = 4
};
//
// textBox2
//
textBox2 = new TextBox
{
Location = new Point(64, 45),
Name = "textBox2",
Size = new Size(100, 23),
TabIndex = 5
};
//
// textBox3
//
textBox3 = new TextBox
{
Location = new Point(64, 77),
Name = "textBox3",
Size = new Size(100, 23),
TabIndex = 6
};
//
// label4
//
label4 = new Label
{
AutoSize = true,
Location = new Point(173, 19),
Name = "label4",
Size = new Size(44, 17),
TabIndex = 7,
Text = "姓名:"
};
//
// label5
//
label5 = new Label
{
AutoSize = true,
Location = new Point(173, 51),
Name = "label5",
Size = new Size(44, 17),
TabIndex = 8,
Text = "年龄:"
};
//
// label6
//
label6 = new Label
{
AutoSize = true,
Location = new Point(173, 83),
Name = "label6",
Size = new Size(44, 17),
TabIndex = 9,
Text = "工资:"
};
//
// textBox4
//
textBox4 = new TextBox
{
Location = new Point(222, 13),
Name = "textBox4",
Size = new Size(100, 23),
TabIndex = 10
};
//
// textBox5
//
textBox5 = new TextBox
{
Location = new Point(222, 45),
Name = "textBox5",
Size = new Size(100, 23),
TabIndex = 11
};
//
// textBox6
//
textBox6 = new TextBox
{
Location = new Point(222, 77),
Name = "textBox6",
Size = new Size(100, 23),
TabIndex = 12
};
//
// groupBox1
//
groupBox1 = new GroupBox
{
Location = new Point(12, 12),
Name = "groupBox1",
Size = new Size(335, 107),
TabIndex = 0,
TabStop = false,
Text = "员工信息"
};
groupBox1.Controls.Add(textBox6);
groupBox1.Controls.Add(textBox5);
groupBox1.Controls.Add(textBox4);
groupBox1.Controls.Add(label6);
groupBox1.Controls.Add(label5);
groupBox1.Controls.Add(label4);
groupBox1.Controls.Add(label1);
groupBox1.Controls.Add(label2);
groupBox1.Controls.Add(label3);
groupBox1.Controls.Add(textBox1);
groupBox1.Controls.Add(textBox2);
groupBox1.Controls.Add(textBox3);
groupBox1.SuspendLayout();
//
// button1
//
button1 = new Button
{
Location = new Point(272, 125),
Name = "button1",
Size = new Size(75, 23),
TabIndex = 0,
Text = "获取",
UseVisualStyleBackColor = true
};
button1.Click += Button1_Click;
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(359, 156);
Controls.Add(button1);
Controls.Add(groupBox1);
Name = "Form1";
Text = "使用泛型存储不同类型的数据列表";
groupBox1.ResumeLayout(false);
groupBox1.PerformLayout();
}
/// <summary>
/// 为泛型类中声明的字段进行赋值,存储不同类型的值
/// 实例化泛型类对象
/// 将泛型类中各字段的值显示在文本框中
/// </summary>
private void Button1_Click(object? sender, EventArgs e)
{
Types<object> Extecute = new()
{
ID = 1,
Name = "王老师",
Sex = "男",
Age = 25,
Birthday = Convert.ToDateTime("1986-06-08"),
Salary = 1500.45F
};
textBox1!.Text = Extecute.ID.ToString();
textBox2!.Text = Extecute.Sex.ToString();
textBox3!.Text = Extecute.Birthday.ToString();
textBox4!.Text = Extecute.Name.ToString();
textBox5!.Text = Extecute.Age.ToString();
textBox6!.Text = Extecute.Salary.ToString();
}
/// <summary>
/// 声明泛型类
/// 在泛型类内声明泛型字段
/// </summary>
/// <typeparam name="T"></typeparam>
class Types<T>
{
public T? ID; //声明编号字段
public T? Name; //声明姓名字段
public T? Sex; //声明性别字段
public T? Age; //声明年龄字段
public T? Birthday;//声明生日字段
public T? Salary; //声明薪水字段
}
}
}