我有多个构造函数,比如class a1
{
public a1(string b1)
{
}
public a1(MyData b2)
}
那么我如何在第一个构造函数中用b1生成一个MyData类再去调用第二个构造函数呢?直接用:this()似乎不可以。
vb是可以做到的,C#对应的方法是什么呢?

解决方案 »

  1.   


    class a1
    {
        public a1(string b1):this(new MyData(b1))
        {
        }
        public a1(MyData b2)
        }
      

  2.   

    MyData b2 = ...;
    class a1 = new a1(b2);
      

  3.   

    那么如果我想在new MyData之前再做其它工作呢?比如b1里边包含复杂的格式需要解析其中一部分出来
      

  4.   

    那你还是贴实际的代码把。这样说看不懂。
    一个规则,构造函数最好是链式的,一个调用一个的方式。你也正在考虑这样设计。这样设计是很好的。如果实在无法链式的串起来。就分支,把公共的操作放在无参构造函数中,如果不希望外面用,那无参构造函数定义为private的好了。
      

  5.   

    我以前用VB的,构造链式构造函数组很容易,因为New可以用在函数中的各个位置,但C#不能这么用啊,所以才来问有什么好的实现方法。
      

  6.   


    public class MyGZ
        {
            public MyGZ(XmlDocument PackageList)
            {        }
            public MyGZ(string PackageListString)
            {
                XmlDocument d = new XmlDocument();
                d.LoadXml(PackageListString);
               //在这里怎么去调用第一个构造函数呢?
            }
        }
      

  7.   


    “链式构造函数”没有必要。原因:
    1 “链式构造函数”的重载参数类型完全可以在类内部转化,没必要在构造函数上链式转化。
    2 即使你确实需要这种形式,可以采用“修饰模式”的方式实现,你可以参考IOStream 体系的用法。
      

  8.   


    public class MyGZ
        {
            public MyGZ(XmlDocument PackageList)
            {        }
            public MyGZ(string PackageListString)
            {
                XmlDocument d = new XmlDocument();
                d.LoadXml(PackageListString);
               //在这里怎么去调用第一个构造函数呢?
                  MyGZ(d);
            }
        }
      

  9.   

     public class MyGZ
        {
            public MyGZ(XmlDocument PackageList)
            {        }
            public MyGZ(string PackageListString):this(new XmlDocument().LoadXml(PackageListString))
            {
               
            }
        }
      

  10.   


    var a = new a1(new a1(b1));
      

  11.   


    貌似vb.net里的new只能在构造函数第一行吧
      

  12.   

    a1 和 mydata 什么关系?继承关系的话就是var a = new a1(new a1(b1) as mydata);
    完全不同的话需要一个方法进行转化var a = new a1(new a1(b1).tomydata());