2009-08-20 8 views
5

J'ai la classe suivante:Question concernant interface fluide en 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; 
    } 
} 

En grammaire anglaise, vous ne pouvez pas avoir « est quelque chose d'égal à quelque chose » ou « fait quelque chose de plus que quelque chose », donc je ne suis pas veulent que Is.EqualTo et Does.GreaterThan soient possibles. Y a-t-il un moyen de le restreindre?

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 

Merci!

+0

Etes-vous sûr que "quelque chose est égal à quelque chose" est grammaticalement incorrect ?? –

+0

Peut-être pas mais vous avez l'idée juste? – Jeff

+0

Ouais j'ai l'idée, je pense que c'est sur le contexte. Est-ce que vous * demandez * si c'est égal ou * indiquant * que c'est égal? Je répondrais à votre question si je savais mais pour vous dire la vérité je ne suis pas sûr, donc je suis une grammaire nazi :) –

Répondre

9

Pour appliquer ce genre de chose, vous aurez besoin de plusieurs types (pour limiter ce qui est disponible à partir de quel contexte) - ou au moins quelques interfaces:

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 oui ... merci. – Jeff

+0

nous avons besoin d'un gourou de la grammaire maintenant! – Jeff

0

Ma solution serait

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; 
    } 
} 

Tout à fait similaire à Gravell, mais légèrement plus simple à comprendre, à mon avis.

+0

Je préfère la solution de Gravell car je peux diviser la classe unique en classe partielle pour la lisibilité. – Jeff

Questions connexes