Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 父类引用的替代方法_C#_.net - Fatal编程技术网

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
就像打开一罐蠕虫一样?随着时间的推移,最终变得更加混乱的错误代码?