C# 父类引用的替代方法
我正在创建一个C# 父类引用的替代方法,c#,.net,C#,.net,我正在创建一个inf文件解析器(windows驱动程序,理论上类似于infs,实际上完全不同) 我有一个父InfFile类,它以节和键的形式包含结构化但未经分析的数据(我称之为未经分析的,因为它没有被转换成任何比节和键更有用的数据,而不是后面的其余数据),但也允许访问一些解析数据,例如支持操作系统,文件夹,文件夹.Files等 我面临的问题是,在inf文件中,可以引用4种类型的文件夹:default、X86、Ia64和Amd64。因此,我觉得尝试将所有与文件夹相关的代码转移到一个InfFolde
inf
文件解析器(windows驱动程序,理论上类似于infs,实际上完全不同)
我有一个父InfFile
类,它以节和键的形式包含结构化但未经分析的数据(我称之为未经分析的,因为它没有被转换成任何比节和键更有用的数据,而不是后面的其余数据),但也允许访问一些解析数据,例如支持操作系统
,文件夹
,文件夹.Files
等
我面临的问题是,在inf
文件中,可以引用4种类型的文件夹
:default
、X86
、Ia64
和Amd64
。因此,我觉得尝试将所有与文件夹相关的代码转移到一个InfFolders
类是合乎逻辑的,该类具有属性Default
、X86
、Ia64
和Amd64
(我不能简单地合并它们)
但是,为了确定其中引用了哪些文件夹,我需要访问InfFile
类的部分和键
属性。这意味着:
- 我的
InfFolders
类包含对其父类的引用(我认为这可能不是最好的解决方案)
InfFile
首先解析数据,然后将其作为构造函数的一部分传递给InfFolders
,但这意味着所有文件夹
逻辑现在再次存在于InfFile
类中
- 作为构造函数的一部分,我将所需的
部分
和键
传递给InfFolders
,并具有将它们排序为其中可用对象的逻辑
这样做的最佳方式是什么?在这种情况下,最佳实践是什么
InfFolders
类的外观如下:
public class InfFolders
{
public IReadOnlyCollection<InfSourceFolder> Default()
{
return GetFolders("SourceDiskNames").ToList().AsReadOnly();
}
public IReadOnlyCollection<InfSourceFolder> X86()
{
return GetFolders("SourceDiskNames.X86").ToList().AsReadOnly();
}
public IReadOnlyCollection<InfSourceFolder> Ia64()
{
return GetFolders("SourceDisksNames.Ia64").ToList().AsReadOnly();
}
public IReadOnlyCollection<InfSourceFolder> Amd64()
{
return GetFolders("SourceDisksNames.Amd64").ToList().AsReadOnly();
}
private IEnumerable<InfSourceFolder> GetFolders(string sectionName)
{
return <InfFile reference>[sectionName]?.Keys?.Select(
x =>
new InfSourceFolder(Convert.ToInt32(x.Name),
new FileInfo(<InfFile reference>.FilePath).DirectoryName + x.Values.ElementAtOrDefault(3)));
}
}
公共类文件夹
{
公共IReadOnlyCollection默认值()
{
返回GetFolders(“SourceDiskNames”).ToList().AsReadOnly();
}
公共IReadOnlyCollection X86()
{
返回GetFolders(“SourceDiskNames.X86”).ToList().AsReadOnly();
}
公共IReadOnlyCollection Ia64()
{
返回GetFolders(“SourceDisksNames.Ia64”).ToList().AsReadOnly();
}
公共IReadOnlyCollection Amd64()
{
返回GetFolders(“SourceDisksNames.Amd64”).ToList().AsReadOnly();
}
私有IEnumerable GetFolders(字符串节名)
{
返回[sectionName]?。键?。选择(
x=>
新的InfSourceFolder(Convert.ToInt32(x.Name),
新文件信息(.FilePath).DirectoryName+x.Values.ElementAtOrDefault(3));
}
}
正如您在方法GetFolders()
中所看到的,有两个地方需要引用父对象
我可以将所有这些代码转移到InfClass
并将InfFolders
类全部删除,但我认为这也不是一个很好的模型。在我看来,有4个属性都与同一事物相关,因此它们应该组合在一起。这里不讨论继承。这就是类InfFolders的全部内容吗?这个引用有什么错?(除非它不是一个接口)您一直称它为“父级”,但它只是这个类操作的共享数据集合。如果您有两个类在同一个集合上运行,您必须以某种方式共享它。@CodeCaster不会共享引用InfFile
就像打开一罐蠕虫一样?随着时间的推移,最终变得更加混乱的错误代码?