2009-08-20 45 views
5

Tôi có lớp sau đây:Câu hỏi liên quan đến giao diện thông thạo C#

public class Fluently 
{ 
    public Fluently Is(string lhs) 
    { 
    return this; 
    } 
    public Fluently Does(string lhs) 
    { 
    return this; 
    } 
    public Fluently EqualTo(string rhs) 
    { 
    return this; 
    } 
    public Fluently LessThan(string rhs) 
    { 
    return this; 
    } 
    public Fluently GreaterThan(string rhs) 
    { 
    return this; 
    } 
} 

Trong ngữ pháp tiếng Anh bạn không thể có “một cái gì đó tương đương với một cái gì đó” hay “làm điều gì đó lớn hơn một cái gì đó” vì vậy tôi không muốn Is.EqualTo và Does.GreaterThan có thể thực hiện được. Có cách nào để hạn chế nó không?

var f = new Fluently(); 
f.Is("a").GreaterThan("b"); 
f.Is("a").EqualTo("b");  //grammatically incorrect in English 
f.Does("a").GreaterThan("b"); 
f.Does("a").EqualTo("b");  //grammatically incorrect in English 

Cảm ơn bạn!

+0

Bạn có chắc chắn rằng "là một cái gì đó tương đương với một cái gì đó" là không đúng ngữ pháp? –

+0

Có lẽ không nhưng bạn có ý tưởng đúng không? – Jeff

+0

Vâng, tôi có ý tưởng, tôi nghĩ về bối cảnh của nó. Bạn có * hỏi * nếu nó bằng hoặc * nói * rằng nó bằng nhau? Sẽ trả lời câu hỏi của bạn nếu tôi biết nhưng để cho bạn biết sự thật tôi không chắc chắn, vì vậy tôi là một ngữ pháp nazi :) –

Trả lời

9

Để thi hành mà loại điều, bạn sẽ cần nhiều loại (để hạn chế những gì có sẵn từ mà ngữ cảnh) - hoặc ít nhất một vài giao diện:

public class Fluently : IFluentlyDoes, IFluentlyIs 
{ 
    public IFluentlyIs Is(string lhs) 
    { 
     return this; 
    } 
    public IFluentlyDoes Does(string lhs) 
    { 
     return this; 
    } 
    Fluently IFluentlyDoes.EqualTo(string rhs) 
    { 
     return this; 
    } 
    Fluently IFluentlyIs.LessThan(string rhs) 
    { 
     return this; 
    } 
    Fluently IFluentlyIs.GreaterThan(string rhs) 
    { 
     return this; 
    } 
} 
public interface IFluentlyIs 
{ 
    Fluently LessThan(string rhs); 
    Fluently GreaterThan(string rhs); 
} 
public interface IFluentlyDoes 
{ // grammar not included - this is just for illustration! 
    Fluently EqualTo(string rhs); 
} 
+0

oh yes ... cảm ơn. – Jeff

+0

chúng ta cần một guru ngữ pháp ngay bây giờ! – Jeff

0

Giải pháp của tôi sẽ là

public class Fluently 
{ 
    public FluentlyIs Is(string lhs) 
    { 
     return this; 
    } 
    public FluentlyDoes Does(string lhs) 
    { 
     return this; 
    } 
} 

public class FluentlyIs 
{ 
    FluentlyIs LessThan(string rhs) 
    { 
     return this; 
    } 
    FluentlyIs GreaterThan(string rhs) 
    { 
     return this; 
    } 
} 

public class FluentlyDoes 
{ 
    FluentlyDoes EqualTo(string rhs) 
    { 
     return this; 
    } 
} 

Khá giống với Gravell, nhưng hơi đơn giản để hiểu, theo ý kiến ​​của tôi.

+0

tôi thích giải pháp của Gravell vì tôi có thể chia lớp đơn thành lớp từng phần để có thể đọc được. – Jeff

Các vấn đề liên quan