문제

나는 이전에 인터페이스에 대해 질문하고 훌륭한 응답을 얻었습니다. 정말 유연한 코드를 개발하기 시작하게되어 정말 기쁩니다.

이제 가상 방법을 재정의하는 것에 대한 질문이 있습니다.

현재 커뮤니티 서버 SDK와 협력하고 있습니다. 컨트롤 중 하나는 '태그'빵 부스러기입니다. 따라서 관련 객체에 '태그'를 나열합니다.

<CSBlog:TagBreadCrumb />

Adminstrators가 컨텐츠가 레이아웃에 나타날 수 있도록 특정 스팟을 타겟팅 할 수 있도록 태그를 사용하고 있지만 이러한 태그는 최종 사용자와 관련이 없습니다. 예를 들어 'Home_main'태그는 홈페이지의 기본 패널을 타겟팅하는 데 사용되지만 사용자가이를보고 싶지 않습니다.

커뮤니티 서버 용 SDK를 가지고 있기 때문에 '태그 목록'을 렌더링하고 내가 원하는 것을 수행하는 것을 수정하는 컨트롤을 찾았습니다. 그러나 이해는 여러 가지 이유로 핵심을 수정하는 것이 좋지 않다는 것입니다.

그래서 내가하고 싶은 것은 본인의 컨트롤을 만드는 것입니다. 기본 제어와 거의 동일하지만 하나의 방법을 무시합니다.

방법은 다음과 같습니다.

 public virtual string FormatTags(string[] tagList)

내부에는 태그를 형식화하는 코드가 있으며, 제외 할 '태그'에 대한 구성 파일을 확인하는 것을 제외하고는 동일한 작업을 모두 수행하는 나만의 코드를 작성하고 싶습니다.

그래서 내 이해는 기본 제어에서 파생 된 제어 제어를 만들고 내 자신의 formattags () 메소드를 쓸 수 있다는 것입니다.

나는 그것의 한 가지 측면 만 변경하면되지만, 이것은 기본 클래스에서 해당 방법의 원본 코드를 복사하고 거기에 필요한 것을 변경해야합니까? 한 지점에서 올바른 카피 로그 코드를 느끼지 않지만 기본 클래스에서 코드를 변경하지 않고 메소드를 확장하는 다른 방법을 모릅니다.

제안 해주셔서 감사합니다.

도움이 되었습니까?

해결책

여전히 Dervied 방법을 실행하고 결과에서 작동 할 수 있습니다.

public override string FormatTags(string[] tagList) {
    string result = base.FormatTags(tagList);
    // do something with result
    return result;
}

다른 팁

귀하의 경우 (빵 부스러기에 특정 태그가 인쇄되지 않도록 억제하려는 경우), 기본 방법을 호출하기 전에 모든 특수 태그를 제거하게됩니다.

따라서 코드는 다음과 같습니다.

public override string FormatTags(string[] tagList)
{
  // strip special tags
  string[] newTagList = stripTags(tagList);
  return base.FormatTags(newTagList);
}

이렇게하면 기본 클래스가 출력 문자열을 어떻게 형식화하는지 이해할 필요가 없습니다.

대신 출력 문자열의 형식을 수정하려면 기본 메소드를 호출하지 않을 것입니다 (이 메소드가 향후 릴리스에서 형식을 변경하고 있기 때문에 영향을 받기를 원하지 않기 때문에).

그래서 내 이해는 기본 제어에서 파생 된 제어 제어를 만들고 내 자신의 formattags () 메소드를 쓸 수 있다는 것입니다.

좋아요; 재정의하면 기본 클래스의 방법을 구현합니다.

최선의 경우 두 가지 중 하나가 발생합니다.

  • 기본 클래스 방법의 출력을 원하는 결과로 변환하는 쉬운 방법이 있습니다.

  • 기본 클래스는 전략 패턴 또는 변형을 사용하여 전략의 적절한 부분을 대체 할 수있는 대체 구현을 제공합니다.

불행히도, 그것은 여기에 그 중 하나가 그런 것처럼 들리지 않으므로 처음부터 그것을 작성해야 할 수도 있습니다.

그래서 내 이해는 기본 제어에서 파생 된 제어 제어를 만들고 내 자신의 formattags () 메소드를 쓸 수 있다는 것입니다.

절대적으로 정확합니다.

많은 코드를 복사해야한다는 것을 알게되면 방법을 재구성하는 것을 살펴 봐야합니다. 복사되는 코드를 재정의하지 않는 다른 방법에 넣은 다음 FormAttags를 무시할 때 필요한 것을 변경하고 다른 방법을 호출하여 복사 한 코드에 액세스하십시오.

보세요 확장 방법. 이를 통해 자신의 정적 클래스에서 기능을 정의하여 편집하거나 확장 할 수없는 밀봉 클래스의 기능을 확장 할 수 있습니다. 다음은 방금 작성한 예입니다 (구문 오류가있을 수 있음).

public static class MyExtensions
{
    public static string AppendCrazyText(this string s, string crazyText)
    {
        return s + crazyText;
    }
}

이제 액세스하려면 간단히 전화 할 수 있습니다.

string myString = "Hello world";
string myCrazyText = ", lets go crazy!";

string myResult = myString.AppendCrazyText(myCrazyText);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top