繁体   English   中英

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

[英]Initializing Inherited Class Through Derived Constructor's Arguments (C#)

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

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

很显然,我不能仅仅做到这一点,但它最能显示出我想要做什么。 我这样做的主要原因是因为流相互矛盾-我的意思是,在该类中,另一个类自动打开文件(并进行一些读取等操作),并且引发异常,文件不可访问。 也许我做错了,但是感谢大家的宝贵时间!

你不能那样做,不。 但是对于Stream ,可以从Stream派生,将FileStream存储在一个私有字段中,并将所有方法调用传递给它:

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(...); }
}

如果将文本光标移动到Example :后面的Stream一词,请按Alt + Shift + F10并选择“ Implement abstract class Stream”,它将为您生成所有方法声明,但是您仍然必须更改所有throw new NotImplementedException()正确调用_underlying

如您所料,您在语法上犯了错误,可以为本示例提供帮助。

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)
    { }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM