使用泛型定义一个父类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Practice
{
public class Power<T1,T2,T3>
{
public Power(T1 age, T2 gender, T3 name) //重新定义构造函数时, 可以使用this指向最全的构造函数,缺的参数用默认值代替.只能用在指定类型int之类,不能T1 T2
{
this.Age = age;
this.Gender = gender;
this.Name = name;
}
private T1 _age;
private T2 _gender;
private T3 _name;
public T1 Age { get => _age; set => _age = value; }
public T2 Gender { get => _gender; set => _gender = value; }
public T3 Name { get => _name; set => _name = value; }
void Poweron()
{
Console.WriteLine("电源已接通");
}
void Poweroff()
{
Console.WriteLine("电源已关闭");
}
}
}
定义一个接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Practice
{
interface Iprinter
{
void Fax();
void Print();
void Copy();
}
}
同时使用继承和接口构造对象
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Practice
{
public class HP<T1,T2,T3,T4> : Power<T1,T2,T3>,Iprinter
{
public HP(T1 age, T2 gender, T3 name, T4 id) : base(age, gender, name)
{
this.Id = id;
}
//private int _id;
public T4 Id { get; set; }
public void Ink()
{
Console.WriteLine("惠普打印机缺油墨");
}
public void Copy()
{
Console.WriteLine("正在使用惠普打印机复印");
}
public void Fax()
{
Console.WriteLine("正在使用惠普打印机传真");
}
public void Print()
{
Console.WriteLine("正在使用惠普打印机打印");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Practice
{
public class Connon<T1, T2, T3,T4> : Power<T1,T2,T3>, Iprinter
{
public Connon(T1 age, T2 gender, T3 name,T4 id) : base(age, gender, name)
{
this.Id = id;
}
private T4 _id;
public T4 Id { get => _id; set => _id = value; }
public void Ink()
{
Console.WriteLine("佳能打印机缺油墨");
}
public void Copy()
{
Console.WriteLine("正在使用佳能打印机复印");
}
public void Fax()
{
Console.WriteLine("正在使用佳能打印机传真");
}
public void Print()
{
Console.WriteLine("正在使用佳能打印机打印");
}
}
}
实现泛型类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Practice
{
class Program
{
static void Main(string[] args)
{
int age = 0;
char gender = '男';
string name = "printer";
int id = 1;
List<Iprinter> list = new List<Iprinter>()
{
new HP<int,char,string,int>(age,gender,name,id ), //Iprinter Hp
new Connon<int,char,string,int>(age, gender, name, id) //Iprinter Con
};
foreach (var item in list)
{
item.Fax();
}
Console.ReadKey();
}
}
泛型委托, 以及Func和Action泛型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Practice
{
class Program
{
static void Main(string[] args)
{
//1, 泛型委托
DelePrinter<int> printt = (int a, int b) => { return a + b; };
Console.WriteLine(printt(3, 10));
Console.ReadKey();
//Func委托 有返回值
Func<int, int, double> func = (a, b) => { return a + b; };
Console.WriteLine(func(3, 10));
Console.ReadKey();
//Action委托, 无返回值
Action<int, double> action = (a, b) => { Console.WriteLine("第一个数是{0},第二个数是{1}", a, b); };
action(3, 10);
Console.ReadKey();
}
}
public delegate T DelePrinter<T>(T name, T age);//1, 泛型委托
}