簡體   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