我有需要数据的类,它可以是字节或文件路径。
此刻,我将文件读入字节数组,然后设置类。在另一个分隔符中,它直接根据作为参数传递的字节来设置类。
我希望第一个构造函数(文件路径)调用第二个(字节),类似于:
public DImage(byte[] filebytes) : this()
{
MemoryStream filestream = null;
BinaryReader binReader = null;
if (filebytes != null && filebytes.Length > 0)
{
using (filestream = new MemoryStream(filebytes))
{
if (filestream != null && filestream.Length > 0 && filestream.CanSeek == true)
{
//do stuff
}
else
throw new Exception(@"Couldn't read file from disk.");
}
}
else
throw new Exception(@"Couldn't read file from disk.");
}
public DImage(string strFileName) : this()
{
// make sure the file exists
if (System.IO.File.Exists(strFileName) == true)
{
this.strFileName = strFileName;
byte[] filebytes = null;
// load the file as an array of bytes
filebytes = System.IO.File.ReadAllBytes(this.strFileName);
//somehow call the other constructor like
DImage(filebytes);
}
else
throw new Exception(@"Couldn't find file '" + strFileName);
}
那么,如何从第二个调用第一个构造函数(以保存复制和粘贴代码)呢?
最佳答案
您可以创建一个以byte[]
为参数的私有方法,例如ProcessImage(byte[] myparam)
,两个构造函数都将调用该私有方法来处理您的字节。
旁注:您可能要考虑使用stream
而不是byte[]
。
快速示例:
public DImage(byte[] filebytes) : this() // Remove if no parameterless constructor
{
MemoryStream filestream = null;
BinaryReader binReader = null;
if (filebytes != null && filebytes.Length > 0)
{
using (filestream = new MemoryStream(filebytes))
{
this.ProcessStream(filestream);
}
}
else
throw new Exception(@"Couldn't read file from disk.");
}
public DImage(Stream stream) : this() // Remove if no parameterless constructor
{
this.ProcessStream(stream);
}
public DImage(string strFileName) : this() // Remove if no parameterless constructor
{
// make sure the file exists
if (System.IO.File.Exists(strFileName) == true)
{
this.strFileName = strFileName;
// process stream from file
this.ProcessStream(System.IO.File.Open(strFileName));
}
else
throw new Exception(@"Couldn't find file '" + strFileName);
}
...
private ProcessStream(Stream myStream)
{
if (filestream != null && filestream.Length > 0 && filestream.CanSeek == true)
{
//do stuff
}
else
throw new Exception(@"Couldn't read file from disk.");
}
关于c# - C#中的多个构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14814154/