我可以调用重载构造函数从另一个构造函数的同类在c# ?
当前回答
编辑:根据原文的评论,这是一个c#问题。
简单的回答:是的,使用this关键字。
长一点的回答:是的,使用this关键字,这里有一个例子。
class MyClass
{
private object someData;
public MyClass(object data)
{
this.someData = data;
}
public MyClass() : this(new object())
{
// Calls the previous constructor with a new object,
// setting someData to that object
}
}
其他回答
编辑:根据原文的评论,这是一个c#问题。
简单的回答:是的,使用this关键字。
长一点的回答:是的,使用this关键字,这里有一个例子。
class MyClass
{
private object someData;
public MyClass(object data)
{
this.someData = data;
}
public MyClass() : this(new object())
{
// Calls the previous constructor with a new object,
// setting someData to that object
}
}
不,你不能这样做,在c#中唯一可以从另一个构造函数调用构造函数的地方是紧挨着构造函数后面的":"。 例如
class foo
{
public foo(){}
public foo(string s ) { }
public foo (string s1, string s2) : this(s1) {....}
}
在c#中,不可能从方法体内部调用另一个构造函数。 你可以这样调用基类构造函数:foo(args):base(),正如你自己指出的那样。 你也可以在同一个类中调用另一个构造函数:foo(args):this()。
当你想在调用基类构造函数之前做一些事情时,基类is的构造似乎依赖于一些外部的东西。如果是这样,你应该通过基构造函数的参数,而不是通过设置基类的属性或类似的东西
如果你的意思是你是否可以在c#中做ctor链接,答案是肯定的。这个问题已经被问过了。
然而,从评论来看,似乎你真正想问的是 我可以调用重载构造函数从另一个构造函数与前/后处理? 虽然c#没有这样做的语法,但你可以用一个通用的初始化函数来做到这一点(就像你在不支持ctor链接的c++中所做的那样)
class A
{
//ctor chaining
public A() : this(0)
{
Console.WriteLine("default ctor");
}
public A(int i)
{
Init(i);
}
// what you want
public A(string s)
{
Console.WriteLine("string ctor overload" );
Console.WriteLine("pre-processing" );
Init(Int32.Parse(s));
Console.WriteLine("post-processing" );
}
private void Init(int i)
{
Console.WriteLine("int ctor {0}", i);
}
}
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?
- c#对象列表,我如何得到一个属性的和