• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
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();
        }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C/C++实现删除字符串的首尾空格发布时间:2022-07-18
下一篇:
如何判斷回文(palindrome)?(C/C++)(C)(STL)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap