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 = ; 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();
}
C# 泛型 new{ }??? //加new 和不加new 有什么不同? new() 约束的更多相关文章
- new对象时,类名后加括号与不加括号的区别
[1]默认构造函数 关于默认构造函数,请参见随笔<类中函数> 请看测试代码: 1 #include <iostream> 2 using namespace std; 3 4 ...
- C++中创建对象的时候加括号和不加括号的区别
c++创建对象的语法有----- 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a = new My ...
- 详解变量声明加 var 和不加 var 的区别
在全局作用域中声明变量加 var 关键字和不加 var ,js 引擎都会将这个变量声明为全局变量,在实际运行时,两种声明方式的变量的行为也是几乎一致的.但是在全局作用域下是否声明一个变量的 时候加va ...
- JS声明对象时属性名加引号与不加引号的问题
般情况下属性名加引号和不加引号是都可以的,效果是一样的. var obj = { name : '你好', 'age' : 1, }; document.write( obj['name'] + '& ...
- Java中主类中定义方法加static和不加static的区别
Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...
- js中加“var”和不加“var”的区别
JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: var x // x 为 undefined var x = 6; // x 为数字 var x = "Bill&q ...
- 【转】new对象时,类名后加括号和不加括号的区别
请看测试代码: #include <iostream> using namespace std; // 空类 class empty { }; // 一个默认构造函数,一个自定义构造函数 ...
- onclick时间加return和不加return的区别
JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置. 而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是 ...
- 域名加www与不加www不一样结果的解决办法
有些浏览器域名访问加www 与不加www出现的页面不一样.在aj请求的时候也不同.firefox与google新版本的都会自动加上www. 比如 访问haitaohua.com,但aj请求的时候是带w ...
随机推荐
- Linux vim文件编辑器使用
学习目标: 通过本实验熟练vim的使用. 步骤: 1.将用户家目录的ls结果重定向到vimfile.txt 2.查看rh124第403页实验要求,并完成 参考命令: 复制文件前,需要先建立文件,教材上 ...
- Python_Onlineh_Hmework(基础篇,持续更新中...)
1 递归 1.1 定义一个函数,求一个数的阶乘 def func(x): if x == 2: return 2 else: return x*func(x-1) a = func(4) print( ...
- CF486B OR in Matrix(构造+思维)
CF486B 一道有趣的思维题 由于or的性质可知只要a[i][j]为1那么b中第i行,第j列将都变成1 相反的,如果b[i][j]是0那么a中第i行,第j列都必须是0 根据第二个性质我们可以构造出a ...
- Excel透视表基础之数据源、创建、基本术语、基本操作
数据源的基本要求: 每列数据的第一行包含该列标题 不能包含空行或空列 不能包含空单元格 不能包含合并单元格 不能包含同类字段 如果包含空行.空列则删除空行和空列.如果包含空单元格则填充空单元格. 如果 ...
- Python 入门之 内置模块 -- os模块
Python 入门之 内置模块 -- os模块 1.os os是和操作系统做交互,给操作发指令 os模块是与操作系统交互的一个接口,它提供的功能多与工作目录,路径,文件等相关 (1)工作路径 prin ...
- nginx服务报403错误的解决方法
1.可能是文件权限问题,看一下网站所在的文件夹权限,用户组和用户名是否属于www:www,因为nginx.conf顶头写的是user www:www
- EF6
EF讲解 EF(entityframework) ORM框架中的一种 然后 我们来说下 什么是 ORM (对象映射关系) object relation Mapping 微软 为了更简化 使用 ...
- php函数nl2br的反函数br2nl 将html中的br换行符转换为文本输入中的换行符
下面这几个方法将能够帮你解决这个问题. PHP版将html中的<br />换行符转换为文本框中的换行符: 代码如下: function br2nl($text){ return preg_ ...
- Angular7和PrimeNg集成
常规操作之后,随便加了一个控件发现报错了.错误信息看起来是不能识别PrimeNg的组件,经过一番折腾发现.因为用到了ngModel,需要导入FormsModule.因为新建的工程没有导入,导入之后就好 ...
- CentOS6.X系统启动流程
1.硬件启动阶段 BIOS自检 BIOS的功能由两部分组成,分别是POST码和Runtime服务.POST阶段完成后它将从存储器中被清除,而Runtime服务会被一直保留,用于目标操作系统的启动.B ...