我的示例代码:
public class GenericClass<T> : IDisposable where T: System.Data.Linq.DataContext
{
public T context{ get; private set; }
public GenericClass()
{
this.context= default(T); // default(T) return null
// code
}
public void Dispose()
{
context.Dispose();
}
}
使用GenericClasss示例代码:
using (GenericClasss <DataAccessDataContext> dataAccess = new GenericClasss <DataAccessDataContext>())
{
//code
}
其中DataAccessDataContext
是.dbml(继承System.Data.Linq.DataContext)并具有默认构造函数
很抱歉,如果这很简单,我就不会注意到了。非常感谢你。
答案 0 :(得分:6)
这是引用类型default(T)
的默认值的预期行为,其中T
是引用类型null
。
答案 1 :(得分:5)
如果您无法使用通用类型创建新对象,则应使用new()
关键字:
public class GenericClass<T> : IDisposable where T: System.Data.Linq.DataContext, new()
在构造函数中调用new T()
:
public GenericClass()
{
this.context = new T();
}
编译器必须知道T
有一个默认构造函数。
答案 2 :(得分:0)
如果您尝试实例化新上下文,则可以执行以下操作:
public GenericClass()
{
this.context = new T();
}
答案 3 :(得分:0)
使用通用new()
约束定义类:
public class GenericClass<T> : IDisposable where T: System.Data.Linq.DataContext, new()
{
...
并使用
this.context = new T();