首页 新闻 会员 周边 捐助

大家对构造函数中抛出异常有什么看法?

0
悬赏园豆:5 [待解决问题]

今天看同事的C#代码,有一段代码类似如下:

public class CtlUserInfo
{
  public CtlUserInfo(int id, CtlOtherPage ctlOtherPage)

  {
    if (id <= 0 || ctlOtherPage == null)
    {
      throw new Exception();
    }
  .....
  }
}

大家有什么高见?

晓亮的主页 晓亮 | 初学一级 | 园豆:188
提问于:2012-08-06 21:44
< >
分享
所有回答(6)
0

这种做法不能算错。事实上.net framework中也有构造函数中抛出异常的写法,比如在list的构造函数中传入一个负数:

var numbers = new List<int>(-1);   //throws an exception

但是个人认为仍然应当尽量避免构造函数抛异常(没有理由,纯粹个人的代码感觉)。如果有抛异常的可能,我觉得用工厂方法比较容易让人接受。

class UserInfoProvider
{
      public static UserInfo Create()
      {
            //initialize
      }
}
水牛刀刀 | 园豆:6350 (大侠五级) | 2012-08-06 23:14
0

我也学习了。。!

Angkor--:-- | 园豆:1086 (小虾三级) | 2012-08-06 23:58
0

很正常啊。

中文代码 | 园豆:951 (小虾三级) | 2012-08-07 08:24
0

用正确异常,如3个ArgumentException,然后写exception注释,调用的人就知道会报什么一场。构造函数最好不要调用virtual的函数进行初始化,因为是可以重写,子类怎样实现完全无法知道。

沉默的糕点 | 园豆:1786 (小虾三级) | 2012-08-07 09:28
0

这个也算正常吧。构造函数中,有参数的输入,这些是要检查的,不符合构造对象的要求,就要抛出异常来告知对象创建失败。

chenping2008 | 园豆:9836 (大侠五级) | 2012-08-07 10:14
0

我认为抛异常跟是否在构造函数一点关系也没有.

zhangweiwen | 园豆:904 (小虾三级) | 2012-08-07 11:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册