
/// <summary>
/// 默认构造函数约束
/// </summary>
/// <typeparam name="U"></typeparam>
public class GetEntity<U> where U : new()
{
U u = new U();
}
/*---------派生约束----------*/
/*
* 如果希望在泛型内部使用类型参数实例的某些方法,就必须使用派生约束
*/
public interface ICommon
{
void Add(object obj);
void Update(object obj);
}
public class Common: ICommon
{
public virtual void Add(object obj)
{
}
public virtual void Update(object obj)
{
}
}
public class UserDao:Common
{
public override void Add(object obj)
{
Console.WriteLine("插入一条User记录");
}
public override void Update(object obj)
{
Console.WriteLine("更新一条User记录");
}
}
public class Base
{
public virtual void Open()
{
}
public virtual void Close()
{
}
}
/// <summary>
/// 只派生接口约束
/// </summary>
/// <typeparam name="T"></typeparam>
public class Operate1<T> where T : ICommon,new ()
{
public void Add(object obj)
{
T t = new T();
Console.WriteLine("Add:");
t.Add(obj);
}
public void Update(object obj)
{
T t = new T();
Console.WriteLine("Update:");
t.Update(obj);
}
}
/// <summary>
/// 派生类和接口:
/// 可以在一个类型参数上添加多个接口实现约束和一个基类继承约束。
/// 这种约束可以和默认构造函数约束同时使用,这时默认构造函数约束必须出现在列表尾部。
/// 不能使用类型参数T的静态成员
/// </summary>
/// <typeparam name="T"></typeparam>
public class Operate2<T> :Base where T :ICommon, new()
{
public void Add(object obj)
{
Base b = new Base();
T t = new T();
b.Open();
Console.WriteLine("Add:");
t.Add(obj);
b.Close();
}
public void Update(object obj)
{
T t = new T();
Console.WriteLine("Update:");
t.Update(obj);
}
}
调用实现
public static void FanxingYueShu()
{
Operate1<Common> common = new Operate1<Common>();
User user=new User ();
user.Id=1;
user.UserName="carl";
user.UserPwd = "carl";
common.Add(user);
common.Update(user);
Operate2<Common> common2 = new Operate2<Common>();
common2.Add(new object());
common2.Update(new object());
}
/// 默认构造函数约束
/// </summary>
/// <typeparam name="U"></typeparam>
public class GetEntity<U> where U : new()
{
U u = new U();
}
/*---------派生约束----------*/
/*
* 如果希望在泛型内部使用类型参数实例的某些方法,就必须使用派生约束
*/
public interface ICommon
{
void Add(object obj);
void Update(object obj);
}
public class Common: ICommon
{
public virtual void Add(object obj)
{
}
public virtual void Update(object obj)
{
}
}
public class UserDao:Common
{
public override void Add(object obj)
{
Console.WriteLine("插入一条User记录");
}
public override void Update(object obj)
{
Console.WriteLine("更新一条User记录");
}
}
public class Base
{
public virtual void Open()
{
}
public virtual void Close()
{
}
}
/// <summary>
/// 只派生接口约束
/// </summary>
/// <typeparam name="T"></typeparam>
public class Operate1<T> where T : ICommon,new ()
{
public void Add(object obj)
{
T t = new T();
Console.WriteLine("Add:");
t.Add(obj);
}
public void Update(object obj)
{
T t = new T();
Console.WriteLine("Update:");
t.Update(obj);
}
}
/// <summary>
/// 派生类和接口:
/// 可以在一个类型参数上添加多个接口实现约束和一个基类继承约束。
/// 这种约束可以和默认构造函数约束同时使用,这时默认构造函数约束必须出现在列表尾部。
/// 不能使用类型参数T的静态成员
/// </summary>
/// <typeparam name="T"></typeparam>
public class Operate2<T> :Base where T :ICommon, new()
{
public void Add(object obj)
{
Base b = new Base();
T t = new T();
b.Open();
Console.WriteLine("Add:");
t.Add(obj);
b.Close();
}
public void Update(object obj)
{
T t = new T();
Console.WriteLine("Update:");
t.Update(obj);
}
}
调用实现
public static void FanxingYueShu()
{
Operate1<Common> common = new Operate1<Common>();
User user=new User ();
user.Id=1;
user.UserName="carl";
user.UserPwd = "carl";
common.Add(user);
common.Update(user);
Operate2<Common> common2 = new Operate2<Common>();
common2.Add(new object());
common2.Update(new object());
}