uza*_*y95 7 c# default-constructor
我想使用默认构造函数限制创建对象.因为我有如下设计:
class Program
{
static void Main(string[] args)
{
BaseClass bc = new BaseClass("","");
XmlSerializer xml = new XmlSerializer(typeof(BaseClass));
StreamWriter sw = new StreamWriter(File.Create("c:\\test.txt"));
xml.Serialize(sw,bc);
sw.Flush();
sw.Close();
}
}
[Serializable]
public class BaseClass
{
public string UserName, Password;
// I don't want to create default constructor because of Authentication
public BaseClass(string _UserName, string _Password)
{
UserName = _UserName;
Password = _Password;
f_Authenticate();
}
private void f_Authenticate() { }
}
public class DerivedClass:BaseClass
{
public DerivedClass(string _UserName, string _Password) : base(_UserName, _Password)
{
}
}
Run Code Online (Sandbox Code Playgroud)
还行吧.但是当我将BaseClass设置为Serializable时,它将生成此错误:
Unhandled Exception: System.InvalidOperationException: ConsoleApplication1.BaseC
lass cannot be serialized because it does not have a parameterless constructor.
现在我的设计是崩溃,因为我需要Username,Password参数,但默认构造函数是毁了我的设计....
我该怎么办?
Rob*_*bie 12
创建一个私有默认构造函数
private DerivedClass()
{
// code
}
Run Code Online (Sandbox Code Playgroud)
即使它是私有的,串行器也会成功调用它
Mat*_*ten 11
反序列化实例的类需要一个无参数构造函数来创建实例,但是您不必实现公共构造函数 - 只要它不需要参数就足以拥有private或internal构造函数.
顺便说一句,您也可以使用DataContractSerializer,它不需要无参数构造函数并创建XML; 它总是我的主要选择:-)