2009-02-08 2 views
6

.net 기본 클래스를 재정의 또는 확장하는 방법..net에서 String 클래스를 확장 할 수 있습니다.

후 예

public class String 
{ 
    public boolean contains(string str,boolean IgnoreCase){...} 
    public string replace(string str,string str2,boolean IgnoreCase){...} 
} 

위한

string aa="this is a Sample"; 
if(aa.contains("sample",false)) 
{...} 

것이 가능하다?

답변

22

String 클래스는 봉인되어 있으므로 사용자가 상속 할 수 없습니다. 확장 방법이 최선의 방법입니다. 상속 비용없이 이라는 느낌을 인스턴스 메소드로가집니다.

public static class Extensions { 
    public static bool contains(this string source, bool ignoreCase) {... } 
} 

void Example { 
    string str = "aoeeuAOEU"; 
    if (str.contains("a", true)) { ... } 
} 

확장 방법을 사용하려면 VS 2008을 사용해야합니다.

+0

@ JaredPar : 하나의 수정, VS 2008 확장 메서드를 사용하지 않아도됩니다. .NET 3.5에있는 C# 3.0 용 C# 컴파일러가 필요합니다. VS 2008은 IDE 일 뿐이며 기능을 제공하지 않습니다. – casperOne

+2

@casperOne, 맞습니다. 저는 VS 2008이 일반적으로 널리 알려지기 때문에 보통 VS라고 말합니다. 더 재미있는 것은 자신 만의 Extension 속성을 제공하면 확장 메소드를 사용하여 2.0 응용 프로그램을 컴파일 할 수 있다는 것입니다. http://blogs.msdn.com/jaredpar/archive/2007/11/16/extension-methods-without-3-5-framework.aspx – JaredPar

+3

@casperOne - 당신을 되돌리려 고합니다. "또는 모노 2.0"; -p –

2

String 클래스는 봉인되어 있으므로 확장 할 수 없습니다. 기능을 추가하려면 확장 방법을 사용하거나 자신의 클래스에서 포장하고 필요한 추가 기능을 제공하십시오.

0

추가 기능을 추가하기 위해 어댑터 패턴을 사용할 수도 있습니다. 연산자 오버로딩을 사용하여 내장 문자열과 같은 느낌을 줄 수 있습니다. 물론 기존의 "문자열"사용에는 자동으로 적용되지 않지만 가능하다면 직접 문자열을 상속하는 솔루션도 필요하지 않습니다.

1

일반적으로 유사한 방식으로 사용자의 필요에 맞는 다른 방법이 있는지 확인해야합니다. 예를 들어, Contains은 실제로 IndexOf의 래퍼 메소드이며, 반환 값이 0보다 큰 경우 true을 반환하고, 그렇지 않으면 false을 반환합니다. 결과적으로 IndexOf 메소드에는 여러 가지 오버로드가 있으며 그 중 하나는 IndexOf(string, StringComparison): Int32이며 대소 문자를 무시하거나 무시할 수 있습니다.

예제가 약간 이상하지만 자세한 내용은 String.IndexOf Method (String, StringComparison) (System)을 참조하십시오.

StringComparison 열거 형을 사용할 때 사용할 수있는 다양한 옵션은 StringComparison Enumeration (System)을 참조하십시오.

+0

좋은 생각이었습니다. – ebattulga

관련 문제