关于多个构造函数调用问题

vbfool 2010-05-21 12:41:04
我有多个构造函数,比如

class a1
{
public a1(string b1)
{
}
public a1(MyData b2)
}


那么我如何在第一个构造函数中用b1生成一个MyData类再去调用第二个构造函数呢?直接用:this()似乎不可以。
vb是可以做到的,C#对应的方法是什么呢?
...全文
238 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-05-21
  • 打赏
  • 举报
回复
那你还是贴实际的代码把。这样说看不懂。
一个规则,构造函数最好是链式的,一个调用一个的方式。你也正在考虑这样设计。这样设计是很好的。如果实在无法链式的串起来。就分支,把公共的操作放在无参构造函数中,如果不希望外面用,那无参构造函数定义为private的好了。
vbfool 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
C# code

class a1
{
public a1(string b1):this(new MyData(b1))
{
}
public a1(MyData b2)
}
[/Quote]


那么如果我想在new MyData之前再做其它工作呢?比如b1里边包含复杂的格式需要解析其中一部分出来
mngzilin 2010-05-21
  • 打赏
  • 举报
回复
Snowdust 2010-05-21
  • 打赏
  • 举报
回复
对不起,看错了。
Snowdust 2010-05-21
  • 打赏
  • 举报
回复
MyData b2 = ...;
class a1 = new a1(b2);
兔子-顾问 2010-05-21
  • 打赏
  • 举报
回复

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

violick 2010-05-21
  • 打赏
  • 举报
回复
a1 和 mydata 什么关系?继承关系的话就是var a = new a1(new a1(b1) as mydata);
完全不同的话需要一个方法进行转化var a = new a1(new a1(b1).tomydata());
gxingmin 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 idot 的回复:]
引用 7 楼 vbfool 的回复:

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


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

貌似vb.net里的new只能在构造函数第一行吧
violick 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 vbfool 的回复:]
我有多个构造函数,比如

C# code

class a1
{
public a1(string b1)
{
}
public a1(MyData b2)
}



那么我如何在第一个构造函数中用b1生成一个MyData类再去调用第二个构造函数呢?直接用:this()似乎不可以。
vb是可以做到的,C#对应的方法是什么呢?
[/Quote]

var a = new a1(new a1(b1));
gxingmin 2010-05-21
  • 打赏
  • 举报
回复
sorry,上面代码貌似不行
gxingmin 2010-05-21
  • 打赏
  • 举报
回复
 public class MyGZ
{
public MyGZ(XmlDocument PackageList)
{

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

}
}
lexfu 2010-05-21
  • 打赏
  • 举报
回复

public class MyGZ
{
public MyGZ(XmlDocument PackageList)
{

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


wxwinter11 2010-05-21
  • 打赏
  • 举报
回复
不懂,帮顶了,关注中
idot 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 vbfool 的回复:]

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

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

public class MyGZ
{
public MyGZ(XmlDocument PackageList)
{

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


vbfool 2010-05-21
  • 打赏
  • 举报
回复
我以前用VB的,构造链式构造函数组很容易,因为New可以用在函数中的各个位置,但C#不能这么用啊,所以才来问有什么好的实现方法。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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