• C# 泛型 new{ }??? //加new 和不加new 有什么不同? new() 约束


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace test_20190902_1
    {
        class Program
        {
            static void Main(string[] args)
            {
                HomeController home = new HomeController(); //创建对象 ; 先执行父类构造方法
            }
        }
        public class HomeController : BaseController
        {
            public HomeController()
            {
                Console.WriteLine("HomeController类的构造方法"); //   执行顺序 4 
            }//构造方法
    
        }
        public class BaseController : Controller {
           
            public BaseController()
            {
                Console.WriteLine("BaseController类的构造方法"); //   执行顺序 3
            }//构造方法
            LogManager logdb = new LogManager(); //先执行属性,再 执行构造
        }
        //抽象类
        public abstract class Controller {}
        public class LogManager : DbContext<A> {
            public LogManager()
            {
                Console.WriteLine("LogManager类的构造方法"); //   执行顺序 2
            }//构造方法
        }
        public class DbContext<T> where T : class
        {
            public DbContext()
            {
                Console.WriteLine("DbContext类的构造方法"); // 执行顺序 1
            }//构造方法
    
            //Virtual方法(虚方法)
            public virtual List<T> GetList()
            {
                return new List<T>();
            }
        }
        //public class DbContext<T> where T : class, new()
        //{
        //    public DbContext() {
        //        Console.WriteLine("DbContext类的构造方法"); // 执行顺序 1
        //    }//构造方法
    
        //    //Virtual方法(虚方法)
        //    public virtual List<T> GetList()
        //    {
        //        return  new List<T>();
        //    }
        //}
        public class A { }
    
        //加new 和不加new 有什么不同?
    
          
    }

    //----------
    //不包含空构造函数 时候 ,编译不通过

    public class A {
    public A()
    {

    
    

    }
    public A(string str)
    {

    
    

    }
    }




    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace test_20190902_2
    {
        class Program
        {
            static void Main(string[] args)
            {
                UserManager userdb = new UserManager(); //创建对象
    
                var  t =  userdb.GetFirst("test"); //继承类可以使用父类方法
    
            }
        }
        public class A{
            int z1 { get; set; }
            int z2 { get; set; }
        }
        public class UserManager : DbContext<A> { }
    
        // T是类型
        public class DbContext<T> where T : class
        {
            public object Db;//用来处理事务多表查询和复杂的操作
            public DbContext(){}
            public virtual T GetFirst(string str)
            {
                //return default(T);等同于 return null;
                return null;
                         // Db.Queryable<T>().First(whereExpression);
                //return new T(); //T是不同类,要返回不同类的对象时这种方法错误
            }
        }
    
    }
    public static void test<T>(T A, T B) where T : class, new()
            {
                T temp = new T();
                object value;
                System.Reflection.PropertyInfo[] obj1_s = A.GetType().GetProperties(); //获得该对象所有属性名
                for (int i = 0; i < obj1_s.Length; i++)
                {
                    //temp =A;
                    value = obj1_s[i].GetValue(A);  //获得 第一个对象的  第一个属性值
                    obj1_s[i].SetValue(temp, value, null); //设置 第二个对象的 第一个属性值
    
                    // A = B
                    value = obj1_s[i].GetValue(B);
                    obj1_s[i].SetValue(A, value, null); //设置 第二个对象的 第一个属性值
    
                    //B =temp
    
                    value = obj1_s[i].GetValue(temp);
                    obj1_s[i].SetValue(B, value, null); //设置 第二个对象的 第一个属性值
                }
    
            }
            public class ABC
            {
                int abc { get; set; }
            }
            void fun3()
            {
                fun2<ABC>(new ABC());
            }
            void fun2<T>(T abc) where T : class,new()
            {
                fun1<T>(abc);
            }
    
            void  fun1<T>(T abc) where T:class,new()
            {
                abc = new T();
            }
  • 相关阅读:
    webstorm
    呐,这是某蒟蒻幼稚的博客 ~~Welcome
    CSP-S 2021 补题记录
    CSP-S 2021 游记
    Tarjan 算法小结
    FHQ Treap 浅析
    2048游戏 (C++ Windows)
    线段树 算法分析
    树状数组 算法分析
    数学期望(ξ) 浅析
  • 原文地址:https://www.cnblogs.com/enych/p/11447538.html
Copyright © 2020-2023  润新知