2013-05-16 3 views
0

저는 프로그래밍에 익숙하지 않아 많은 것을 시도하여 새로운 것을 배우려고합니다. 하지만 순간 내가 뭔가에 붙어있어 ...C# 클래스 내의 속성에서 메서드를 호출 할 수 있습니까?

가 기본적으로 내가 무엇을 달성하려고하는 것은 다음 코드 줄을 사용할 수있게하는 것입니다 Url.QueryStringParser.HasParam(""); URL은 클래스, URL 클래스 내에서 QueryStringParser 속성입니다 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 (나쁜 이름 선택). 이 인스턴스는 코드에 의해 생성되지 않으므로 NullReferenceException이 발생합니다. 당신이 재산을해야 할 때 null로에 사용되는 내부 객체를 초기화하는 경우
그래서 당신은 GET 코드의 비트를 변경해야하고이 변화와 재산

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의 정적 생성자에서 그것을 인스턴스를 할당 할 수 있습니다 :

귀하의 문제는 재산 QueryStringParser이 방법 HasParam를 호출 할 수 있다는 사실에있다
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; } 
} 

에 대한 다른 이름을 선택하는 것이 좋습니다. 나는 이것을 연구하고 해결하는 것이 좋은 학습 운동이 될 것이라고 생각합니다.

관련 문제