public class xyz
{
private readonly ICheck _checker;
private readonly IChecker checker;.
public xyz()
{
_checker = checker.Create<xyz>(); //default constructor initialization
};
public xyz(string value)
{
validateIt(value);//parameter Constructor
<!--do something-->
}
private static void validateIt(string value){
var msg= "Is not Valid"; //static method which will log the msg
_checker.log(msg);
}
}
//现在问题是默认构造函数不起作用(C#代码)
//1.checker初始化为null
// 2。无法在静态方法中获取_checker的引用(即使问题1已解决)
答案 0 :(得分:0)
首先,挑剔:
当您未在类代码中指定构造函数时,默认构造函数是c#编译器提供的构造函数。
您无法在类代码中指定默认构造函数。你可以指定一个不带任何参数的构造函数,但它不会是&#34;默认的&#34;了。
指定构造函数后,除非您同时指定其他构造函数,否则它是唯一的构造函数。
其次,如果您使用一个构造函数初始化您的类,那么您也不会自动使用其他构造函数。为此,您需要使用构造函数链接 - 从另一个调用一个构造函数。在你的情况下:
public xyz(string value) : this()
{
// constructor logic goes here
}
第三,private readonly _checker;
将导致编译错误 - 您必须指定私有成员的类型(在任何情况下,它都在下一个代码行中正确定义)
第四,除非您具有对实例的引用,否则您无法从静态成员访问实例成员。如果要将_checker
用作静态成员,则需要将其定义为static
。否则,您需要将xyz
的实例传递给静态方法,或者只是将其设为实例方法:
public class xyz
{
private readonly IChecker checker;
public xyz()
{
// default constructor initialization
_checker = checker.Create<xyz>();
};
public xyz(string value) : this()
{
// parameterized Constructor
validateIt(value);
//do something
}
private void validateIt(string value)
{
var msg= "Is not Valid";
_checker.log(msg);
}
}