{
private IBase<Sys_User> bbuser;
private Sys_User model;
public Sys_User Model
{
get { return model; }
set { model = value; }
}
public IBase<Sys_User> Bbuser
{
get { return bbuser; }
}
public DataEngine()
{
bbuser = new BaseDb<Sys_User>();
model =bbuser.CreateEntity();
}
}
源码如上:
我想把这个类改成通用类,如何才能实现下面的型式?
public class DataEngine<T>
{
private IBase<T> bbuser;
private T model;
public T Model
{
get { return model; }
set { model = value; }
}
public IBase<T> Bbuser
{
get { return bbuser; }
}
public DataEngine()
{
bbuser = new BaseDb<T>();
model =bbuser.CreateEntity();
}
}
15 个解决方案
#1
public class DataEngine<T>
where T:class
{
private IBase<T> bbuser;
private T model;
public T Model
{
get { return model; }
set { model = value; }
}
public IBase<T> Bbuser
{
get { return bbuser; }
}
public DataEngine()
{
bbuser = new BaseDb<T>();
model =bbuser.CreateEntity();
}
}
在红色部分加上应有的条件限制
where T:class
{
private IBase<T> bbuser;
private T model;
public T Model
{
get { return model; }
set { model = value; }
}
public IBase<T> Bbuser
{
get { return bbuser; }
}
public DataEngine()
{
bbuser = new BaseDb<T>();
model =bbuser.CreateEntity();
}
}
在红色部分加上应有的条件限制
#2
#3
加泛型约束
public class DataEngine<T> where T:class, new()
class表示 T类型是一个类
new()表示T必须具备无参构造函数,如果用到了T实例化 T t = new T(); 则必须要有这个约束
同时这个约束必须放在最后面
public class DataEngine<T> where T:class, new()
class表示 T类型是一个类
new()表示T必须具备无参构造函数,如果用到了T实例化 T t = new T(); 则必须要有这个约束
同时这个约束必须放在最后面
#4
没错
#5
public class DataEngine<T> where T : class,new()
{
private IBase<T> bbuser;
private T model;
public T Model
{
get { return model; }
set { model = value; }
}
public IBase<T> Bbuser
{
get { return bbuser; }
}
public DataEngine()
{
bbuser = new BaseDb<T>();
model = bbuser.CreateEntity();
}
}
这样都提示不能错误:
不能将类型“T”用作泛型类型或方法“Mynet.DAL.BaseDb<T>”中的类型形参“T”。没有从“T”到“Mynet.DAL.Imodel”的隐式引用转换
也就是说IBase<T>转成新的类
{
private IBase<T> bbuser;
private T model;
public T Model
{
get { return model; }
set { model = value; }
}
public IBase<T> Bbuser
{
get { return bbuser; }
}
public DataEngine()
{
bbuser = new BaseDb<T>();
model = bbuser.CreateEntity();
}
}
这样都提示不能错误:
不能将类型“T”用作泛型类型或方法“Mynet.DAL.BaseDb<T>”中的类型形参“T”。没有从“T”到“Mynet.DAL.Imodel”的隐式引用转换
也就是说IBase<T>转成新的类
#6
public class DataEngine<T> where T : class,new(),Imodel
#7
谢谢,不过我后面引用DataEngine<俱体实体类> sd;会报下面的错误:
错误 1 类型“Mynet.DAL.Sys_User”同时存在于“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web\d2576897\f8b7b1a8\assembly\dl3\9719319c\000280ee_44f0cb01\DAL.DLL”和“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web\d2576897\f8b7b1a8\assembly\dl3\f1df6cfd\0072d527_18f1cb01\Mynet.DAL.DLL”中 D:\Lfy\Mynet\Web\Default.aspx.cs 22 16 D:\...\Web\
也就是说Imodel放到这里会重复生成两个实例啊,不知道乍么办
错误 1 类型“Mynet.DAL.Sys_User”同时存在于“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web\d2576897\f8b7b1a8\assembly\dl3\9719319c\000280ee_44f0cb01\DAL.DLL”和“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web\d2576897\f8b7b1a8\assembly\dl3\f1df6cfd\0072d527_18f1cb01\Mynet.DAL.DLL”中 D:\Lfy\Mynet\Web\Default.aspx.cs 22 16 D:\...\Web\
也就是说Imodel放到这里会重复生成两个实例啊,不知道乍么办
#8
昏死。那是程序集的问题~~~你加上命名空间限制下
#9
不是吧我不用这种泛型没问题的啊。命名空间没关系的啊
#10
#11
#12
#13
#14
#15
反了没人回
#1
public class DataEngine<T>
where T:class
{
private IBase<T> bbuser;
private T model;
public T Model
{
get { return model; }
set { model = value; }
}
public IBase<T> Bbuser
{
get { return bbuser; }
}
public DataEngine()
{
bbuser = new BaseDb<T>();
model =bbuser.CreateEntity();
}
}
在红色部分加上应有的条件限制
where T:class
{
private IBase<T> bbuser;
private T model;
public T Model
{
get { return model; }
set { model = value; }
}
public IBase<T> Bbuser
{
get { return bbuser; }
}
public DataEngine()
{
bbuser = new BaseDb<T>();
model =bbuser.CreateEntity();
}
}
在红色部分加上应有的条件限制
#2
#3
加泛型约束
public class DataEngine<T> where T:class, new()
class表示 T类型是一个类
new()表示T必须具备无参构造函数,如果用到了T实例化 T t = new T(); 则必须要有这个约束
同时这个约束必须放在最后面
public class DataEngine<T> where T:class, new()
class表示 T类型是一个类
new()表示T必须具备无参构造函数,如果用到了T实例化 T t = new T(); 则必须要有这个约束
同时这个约束必须放在最后面
#4
没错
#5
public class DataEngine<T> where T : class,new()
{
private IBase<T> bbuser;
private T model;
public T Model
{
get { return model; }
set { model = value; }
}
public IBase<T> Bbuser
{
get { return bbuser; }
}
public DataEngine()
{
bbuser = new BaseDb<T>();
model = bbuser.CreateEntity();
}
}
这样都提示不能错误:
不能将类型“T”用作泛型类型或方法“Mynet.DAL.BaseDb<T>”中的类型形参“T”。没有从“T”到“Mynet.DAL.Imodel”的隐式引用转换
也就是说IBase<T>转成新的类
{
private IBase<T> bbuser;
private T model;
public T Model
{
get { return model; }
set { model = value; }
}
public IBase<T> Bbuser
{
get { return bbuser; }
}
public DataEngine()
{
bbuser = new BaseDb<T>();
model = bbuser.CreateEntity();
}
}
这样都提示不能错误:
不能将类型“T”用作泛型类型或方法“Mynet.DAL.BaseDb<T>”中的类型形参“T”。没有从“T”到“Mynet.DAL.Imodel”的隐式引用转换
也就是说IBase<T>转成新的类
#6
public class DataEngine<T> where T : class,new(),Imodel
#7
谢谢,不过我后面引用DataEngine<俱体实体类> sd;会报下面的错误:
错误 1 类型“Mynet.DAL.Sys_User”同时存在于“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web\d2576897\f8b7b1a8\assembly\dl3\9719319c\000280ee_44f0cb01\DAL.DLL”和“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web\d2576897\f8b7b1a8\assembly\dl3\f1df6cfd\0072d527_18f1cb01\Mynet.DAL.DLL”中 D:\Lfy\Mynet\Web\Default.aspx.cs 22 16 D:\...\Web\
也就是说Imodel放到这里会重复生成两个实例啊,不知道乍么办
错误 1 类型“Mynet.DAL.Sys_User”同时存在于“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web\d2576897\f8b7b1a8\assembly\dl3\9719319c\000280ee_44f0cb01\DAL.DLL”和“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web\d2576897\f8b7b1a8\assembly\dl3\f1df6cfd\0072d527_18f1cb01\Mynet.DAL.DLL”中 D:\Lfy\Mynet\Web\Default.aspx.cs 22 16 D:\...\Web\
也就是说Imodel放到这里会重复生成两个实例啊,不知道乍么办
#8
昏死。那是程序集的问题~~~你加上命名空间限制下
#9
不是吧我不用这种泛型没问题的啊。命名空间没关系的啊
#10
#11
#12
#13
#14
#15
反了没人回