簡體   English   中英

聲明對象時可以調用類的方法嗎?

[英]Can you call a class' method when you declare the object?

我有一個類,我聲明它,但該類作為項添加到另一個更大的類。 有沒有辦法在與調用相同的語句中調用Init()方法? 與調用構造函數時定義公共屬性/變量類似。 我不想在構造函數中調用Init()方法,因為它與WPF Designer混淆。

 FitsView fv = new FitsView();
 fv.Init();

您可以使用靜態函數來執行此操作:

public static FitsView CreateFitsView()
{
    var fv = new FitsView();
    fv.Init();
    return fv;
}

然后你只需調用靜態函數而不是new FitsView()

您還可以嘗試將自定義事件掛接到FitsView,如果它知道何時可以初始化它?

並像這樣使用它:

FitsView fv = new FitsView();
fv.someCustomEvent += (o,e) => { fv.Init(); };

StringBuilder.Append類似,您可以更改Init以返回對該對象的引用。

Public FitsView Init()
{
    //Do stuff

    return this;
}

然后:

FitsView fv = new FitsView().Init();

如果設計人員因為你的init方法而出現問題,我可以想到兩個原因:

  • 這是因為你在Init方法中所做的事情需要你的應用程序的位置(讀取資源或文件或使用硬件)
  • 調用Init方法需要動態加載一些外部程序集。

首先,您可能需要檢查:

  1. 對於您的類: WPF中是否有DesignMode屬性?
  2. 對於您的視圖模型: http//blog.laranjee.com/how-to-get-design-mode-property-in-wpf/

此處的人也指出了這個bug,請注意(在winforms中托管wpf): https ://connect.microsoft.com/VisualStudio/feedback/details/620001/system-componentmodel-designerproperties-getisindesignmode-does-not-work- 如果最WPF的是托管式-A-WinForm的#標簽

對於第二個問題,你可以將你的Init方法包裝在另一個假設的InitWrapper然后檢查包裝方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM