나는 DSL을 쓰기 위해 노력하고 있어요설계 유창함 인터페이스 메소드
나는 문자열을 반환하지만 난 내가 + 기호를 사용하는 데 필요한 문자열을 결합하려는하지만 만약 내가 함께하지만 메서드를 호출하고 싶은 방법을 '그것이
나는 순간에 방법이 같은
돌아MyStaticClass.Root() MyStaticClass.And() MyStaticClass.AnyInt()
문자열
Root().And().AnyInt()
문자열이됩니다.
나는 DSL을 쓰기 위해 노력하고 있어요설계 유창함 인터페이스 메소드
나는 문자열을 반환하지만 난 내가 + 기호를 사용하는 데 필요한 문자열을 결합하려는하지만 만약 내가 함께하지만 메서드를 호출하고 싶은 방법을 '그것이
나는 순간에 방법이 같은
돌아MyStaticClass.Root() MyStaticClass.And() MyStaticClass.AnyInt()
문자열
Root().And().AnyInt()
문자열이됩니다.
메서드는 래퍼 클래스를 반환해야합니다. 메소드는 인스턴스 메소드의 래퍼 클래스입니다. 예 :
class Fluent
{
private string _value;
public Fluent And()
{
this._value += "whatever";
return this;
}
public Fluent AnyInt()
{
this._value += "42";
return this;
}
public override string ToString() { return _value; }
}
또한보다는 (또는 첨가 단위) ToString()
재정, 문자열로 Fluent
에서 암시 적 또는 명시 적 변환을 정의 할 수 있습니다.
또한 생산 코드의 경우 문자열 작성자를 사용하여 Concat
에 대한 많은 호출을 피할 수 있습니다.
+ 기호는 사용할 필요가 없습니다. 간단한 정의는 다음 사용 FluentInterface하려면 StringBuilder
http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx
예
StringBuilder builder = new StringBuilder();
builder.Append("One string ").Append("Second string").Append("Another string");
string final = builder.ToString();
을 사용
public class MyOwnStringBuilder
{
public StringBuilder Builder;
public MyOwnStringBuilder()
{
this.Builder = new StringBuilder();
}
public static MyOwnStringBuilder Root
{
get{return new MyOwnStringBuilder();}
}
public string End
{
get{return Builder.ToString();}
}
public MyOwnStringBuilder And(string value)
{
Builder.Append(value);
return this;
}
public MyOwnStringBuilder AnyInt(string value)
{
Builder.Append(value);
return this;
}
}
당신은 그것을 사용하는 것이 :
MyOwnStringBuilder.Root
.And("some value")
.AnyInt("some new value")
.End;
감사합니다.
String builder append? 결과를 얻기 위해 묵시적인 변환은 어떤 모습일까요? 이 스레드도 안전합니까? – Jon
'public static 암시 적 연산자 문자열 (Fluent f) {return f.ToString(); }'. http://msdn.microsoft.com/en-us/library/z5z9kes2.aspx –
@ 존 (Jon) 여러 스레드에서 같은 인스턴스를 사용하지 않는 한 스레드 안전은 걱정해야 할 사항이 아닙니다. 유창한 인터페이스는 일반적으로 단일 메소드에서 사용 된 다음 삭제됩니다. –