我有我的班上有幾個對話框,我試圖用一個函數初始化它們:無法施展派生類的基類
private void InitializeFileDialog(ref FileDialog fileDialog)
{
fileDialog.Filter = "Word Documents|*.doc|Excel Worksheets|*.xls|PowerPoint Presentations|*.ppt" +
"|Office Files|*.doc;*.xls;*.ppt" +
"|All Files|*.*";
fileDialog.DefaultExt = "txt";
}
問題是,當我把它稱爲:
InitializeFileDialog(ref dialog);
error CS1503: Argument 1: cannot convert from 'ref Microsoft.Win32.OpenFileDialog' to 'ref Microsoft.Win32.FileDialog'
我想投,但不能因爲某些原因。有什麼問題?是因爲FileDialog
是抽象的嗎?我試圖查找,如果這是原因,但我找不到任何有用的東西。
下面是在Microsoft.Win32
發現聲明:
public abstract class FileDialog : CommonDialog
public sealed class OpenFileDialog : FileDialog
我也試着使用泛型並沒有奏效。我錯過了什麼?
刪除'ref'關鍵字。對象通過引用傳遞,所以在上面的例子中你不需要它。 – adrianbanks
@adrianbanks它解決了問題!謝謝。但是爲什麼它會拋出一個錯誤? – MasterMastic
@adrianbanks是正確的,但值得注意的是'ref'允許您爲傳遞的變量分配一個不同的對象,所以在某些情況下在傳遞對象時很有用。例如,將'null'分配給對象變量不會改變函數作用域之外的原始對象。有關更多信息,請參閱http://stackoverflow.com/questions/186891/why-use-ref-keyword-when-passing-an-object。 –