2013-05-16 36 views
0

所以我對編程相當陌生,我試圖通過嘗試很多東西來學習新事物。但在現階段,我就死在什麼......C#是否有可能從一個類中的屬性調用方法?

基本上,我想做到的是要能使用下面的代碼行: Url.QueryStringParser.HasParam("");網址是類,QueryStringParser一個URL類中屬性HasParamQueryStringParser類中的一種方法。 它的工作,預計的事實,我得到NullReferenceExceptionQueryStringParser屬性。我不知道爲什麼會發生這種情況...

這是Url類。

public class Url 
{ 
    public static QueryStringParser QueryStringParser { get; private set;} 
} 

這是QueryStringParser類。

public class QueryStringParser 
{ 
    public bool HasParam(string parameter) 
    { 
     return !string.IsNullOrEmpty(HttpContext.Current.Request[parameter]); 
    } 
} 

這是我的asp.net網頁。

if (Url.QueryStringParser.HasParam("Id")) 
{ 
    // Do stuff. 
} 

所以我的問題是,如果有可能創建一些東西,我剛剛提到上面?

+1

試試吧。它是否編譯?它運行嗎?這是一個問題的例子,你可以通過嘗試自己和玩耍來得到更快的答案,而不是問這裏。 – Oded

+1

試試吧。它有用嗎?如果不是,出了什麼問題?這是你應該問的問題。 – Jeff

回答

2

你的問題就在於該財產QueryStringParser,要調用的方法HasParam,需要的一個實例對象QueryStringParser(錯誤的名稱選擇)。這個實例永遠不會被你的代碼創建,因此NullReferenceException。
所以,你需要改變一點在獲取代碼,然後設置你的財產

public class Url 
{ 
    private static QueryStringParser _qsp = null; 
    public static QueryStringParser QueryStringParser 
    { 
     get 
     { 
      if(_qsp == null) _qsp = new QueryStringParser(); 
      return _qsp; 
     } 
     private set 
     { 
      _qsp = value; 
     } 
    } 
} 

隨着這一變化的,當你需要的財產你的代碼將檢查它是否爲空,並初始化用於內部對象存儲QueryStringParser的實例,然後返回這個實例。

繞過異常的另一種可能性是使HasParam方法也是靜態的,在這種情況下,您不需要對象QueryStringParser的實例。

順便說一下,雖然它的工作原理,我覺得有一個屬性命名爲一個類非常混亂。我建議選擇另一名稱爲房地產QueryStringParser

+0

好的,謝謝你的解釋^。^我會更多地嘗試這些東西,並在互聯網上閱讀更多關於它的內容,以便完全理解這一切。 – Rick

0

所有你需要做的是給它分配的URL的靜態構造函數實例:

public class Url 
{ 
    public static Url() 
    { 
     QueryStringParser = new QueryStringParser(); 
    } 

    public static QueryStringParser QueryStringParser { get; private set;} 
} 
0
public class Url 
{ 
    public static QueryStringParser QueryStringParser { get; private set; } 
} 

這是不對的,你需要做的類的實例,使其訪問其方法和屬性。我認爲這將是一個很好的學習練習,讓你研究這個並解決它。

相關問題