default(T)会调用构造函数吗?

Imcx 2016-06-28 11:16:16
自己写了个东西,需要访问数据库,可能会用到sqlserver和mysql



//访问器基类
public abstract class DbAccessor : IDbAccessor
{
public string ConnectionString { get; set; }

//访问方法
}




//SqlServer数据库访问器
public sealed class SqlServerDA : DbAccessor
{
public SqlServerDA()
{
ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ADC"].ConnectionString;
}

//访问方法实现
}





//访问器选择
public class DAUtility<T> where T : DbAccessor
{
public T DA;

public DAUtility()
{
DA = default(T);
}
}





//调用访问器
var da = new DAUtility<SqlServerDA>();
//这里的da不知道为什么是null啊,求帮忙

...全文
131 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Imcx 2016-06-28
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
引用类型不会,但静态构造函数会被初始化 结构类型没试过,不知道会不会 如果你的T默认支持空构造函数的话,你可以这样
public class DAUtility<T> where T : DbAccessor,new()
 {
    public T DA;
 
    public DAUtility()
    {
        DA = new T();
    }
 }
感谢,刚试了下是可行的
  • 打赏
  • 举报
回复
引用类型不会,但静态构造函数会被初始化 结构类型没试过,不知道会不会 如果你的T默认支持空构造函数的话,你可以这样
public class DAUtility<T> where T : DbAccessor,new()
 {
    public T DA;
 
    public DAUtility()
    {
        DA = new T();
    }
 }
Imcx 2016-06-28
  • 打赏
  • 举报
回复
我现在用的另一种方法,把访问器作为参数传递


public DAUtility(DAInterface.IDbAccessor da)
 {
      DA = da as T;
 }

这样做是可以得到访问器实体并且可以取到数据的

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧