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(); }