zoukankan      html  css  js  c++  java
  • 泛型约束

    代码
            /// <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());
            }
  • 相关阅读:
    两个半成品的ORM
    Mayberry小镇的管理 | 三种截然不同的领导风格 3M
    敏捷的目的(方向)错了以后……
    Error:java: Compilation failed: internal java compiler error
    java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
    看mybatis日志模块时涉及的动态代理
    看的顺眼的却Destination Unreachable
    如何下载钉钉回放视频
    不想学习时看一看会有帮助的,“但行好事,莫问前程”
    守护线程
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1706359.html
Copyright © 2011-2022 走看看