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();
        }
原文地址:https://www.cnblogs.com/enych/p/11447538.html