C# 库,具有另一个项目类型的构造函数
C# library, constructor with type of another project
我目前正在开发一个小应用程序来学习一些新概念。我开发了一些 classes 来解析 MBR 和来自磁盘的不同分区。
所以我有了让它更加模块化的想法。
我想将所有这些方法带到一个名为 DiskParsers 的库中,该库用于解析数据。
还有一个调用本地方法执行磁盘的库I/O。
现在的问题是构造函数有一个自定义类型的参数,由我在磁盘 IO 库中编写,负责处理对物理驱动器的读写。
我的图书馆不知道那个类型是什么。
我该如何解决这个问题?使用泛型?将磁盘 I/O class 的接口捆绑到我的解析器库?我的解析器库应该只接受字节缓冲区,并且与自定义类型没有关系?
您可以通过不知道要解析的数据来自何处的方式来实现您的解析器库。例如这样的事情:
public class MBRParser
{
public MasterBootRecord Read(Stream stream)
{
// parsing logic
}
public MasterBootRecord Read(IMBRReader reader)
{
// parsing logic
}
}
public interface IMBRReader
{
MasterBootRecord Read();
}
现在,客户端程序可以利用您的 I/O 库为解析器提供 Stream
:
public class Program
{
public static void Main()
{
var stream = new IOLibrary.Stream();
var mbrParser = new MBRParser();
var mbr = mbrParser.Read(stream);
}
}
或者您的客户端程序实现了一个具体的 IMBRReader
:
public class NativeMBRReader : IMBRReader
{
public MasterBootRecord Read()
{
// native I/O methods to read MBR
}
}
public class Program
{
public static void Main()
{
var mbrReader = new NativeMBRReader();
var mbr = mbrReader.Read();
}
}
无论哪种方式:您的图书馆不需要相互了解。只有客户端程序需要引用它们。可以通过多种方式引用库。最简单的:将库项目和客户端程序放在一个解决方案中。在客户端项目中添加对库的项目引用。
我目前正在开发一个小应用程序来学习一些新概念。我开发了一些 classes 来解析 MBR 和来自磁盘的不同分区。
所以我有了让它更加模块化的想法。 我想将所有这些方法带到一个名为 DiskParsers 的库中,该库用于解析数据。 还有一个调用本地方法执行磁盘的库I/O。 现在的问题是构造函数有一个自定义类型的参数,由我在磁盘 IO 库中编写,负责处理对物理驱动器的读写。 我的图书馆不知道那个类型是什么。
我该如何解决这个问题?使用泛型?将磁盘 I/O class 的接口捆绑到我的解析器库?我的解析器库应该只接受字节缓冲区,并且与自定义类型没有关系?
您可以通过不知道要解析的数据来自何处的方式来实现您的解析器库。例如这样的事情:
public class MBRParser
{
public MasterBootRecord Read(Stream stream)
{
// parsing logic
}
public MasterBootRecord Read(IMBRReader reader)
{
// parsing logic
}
}
public interface IMBRReader
{
MasterBootRecord Read();
}
现在,客户端程序可以利用您的 I/O 库为解析器提供 Stream
:
public class Program
{
public static void Main()
{
var stream = new IOLibrary.Stream();
var mbrParser = new MBRParser();
var mbr = mbrParser.Read(stream);
}
}
或者您的客户端程序实现了一个具体的 IMBRReader
:
public class NativeMBRReader : IMBRReader
{
public MasterBootRecord Read()
{
// native I/O methods to read MBR
}
}
public class Program
{
public static void Main()
{
var mbrReader = new NativeMBRReader();
var mbr = mbrReader.Read();
}
}
无论哪种方式:您的图书馆不需要相互了解。只有客户端程序需要引用它们。可以通过多种方式引用库。最简单的:将库项目和客户端程序放在一个解决方案中。在客户端项目中添加对库的项目引用。