通过派生构造函数初始化继承的类';s参数(C#)

通过派生构造函数初始化继承的类';s参数(C#),c#,class,inheritance,stream,filestream,C#,Class,Inheritance,Stream,Filestream,见鬼,这个标题可能不是最好的,但我是一个相当新的程序员,对继承类没有太多经验。我正在尝试初始化一个类(我自己的流从普通的FileStream类派生),并且可以选择从派生类的参数初始化基。例如 public class Example : FileStream { public Example(FileStream FS) : base = FS } 显然我不能这么做,但这最能说明我想做什么。我这么做的主要原因是因为有矛盾的流——我的意思是,在这个类中,另一个类会自动打开文件(并进行一些读取之类

见鬼,这个标题可能不是最好的,但我是一个相当新的程序员,对继承类没有太多经验。我正在尝试初始化一个类(我自己的流从普通的FileStream类派生),并且可以选择从派生类的参数初始化基。例如

public class Example : FileStream
{
public Example(FileStream FS) : base = FS
}

显然我不能这么做,但这最能说明我想做什么。我这么做的主要原因是因为有矛盾的流——我的意思是,在这个类中,另一个类会自动打开文件(并进行一些读取之类的操作),我会抛出一个异常,该文件无法访问。也许我做错了,但是谢谢大家的时间

正如您所料,您在语法上犯了一个错误,您可以 请帮助完成此示例

public class SomeClassA
{
    public int foo1;
    public string foo2;
    public SomeClassA(int foo1, string foo2)
    {
        this.foo1 = foo1;
        this.foo2 = foo2;
    }
}
public class SomeClassB : SomeClassA
{
    public SomeClassB(int arg1, string arg2)
        : base(arg1, arg2)
    { }
}

不能这样做。但是对于
,您可以从
派生,将
文件流
存储在私有字段中,并将所有方法调用传递给它:

public class Example : Stream
{
    private Stream _underlying;

    public Example(Stream underlying) { _underlying = underlying; }

    // Do the following for all the methods in Stream
    public override int Read(...) { return _underlying.Read(...); }
}

如果将文本光标移动到
示例:
后面的单词
,按Alt+Shift+F10并选择“实现抽象类流”,它将为您生成所有方法声明,但您仍必须更改所有
抛出新的NotImplementedException()
进入到对
\u底层的正确调用中

通过扩展FileStream,您想做什么。我认为它足以处理与文件相关的操作。请解释你想通过这样做完成什么。C++ C++语法:公共REF类实例:公共文件流{public:示例(文件流^流):BASE(流){/*SUDE SUDE,如果有任何*/}}:阿图尔:我没有C++ HANY,但可能不会编译到那里。如果您使用FielestRAMM方法携带一些功能,与Write(byte[],…)类似,但如果希望已经返回反序列化对象或对其进行序列化,则不需要基类iheritace,IMHO。创建您自己的类,并将FileStream句柄传递给执行POCO序列化/反序列化的所有脏作业的方法。这是一种更为通用的方法。@Artur:好吧,C#等价物没有编译,因为
FileStream
没有一个构造函数将
FileStream
作为参数。如果C++有这样的构造函数,它做什么,它是什么?这对它没有帮助。他不想从参数中初始化,而是从一个现有的实例中初始化。谢谢,但请查看我在上面写给Shekhar_Pro的内容。编辑:是的,正如蒂姆维所说。谢谢!我会尽快试一试。你说了些什么,所以。。。物理上不可能在文件流中打开文件流,与其他操作系统不同,windows不支持分层FS,您可以尝试内存映射文件,在FS中拥有编解码器(如WMA或MP3),或者使用任何已知的虚拟化技术。