如何“发送”一种方法到另一种方法?

问题描述:

我有以下几点:如何“发送”一种方法到另一种方法?

public class Mail { 
    public String Obfuscate(String email) { 
    return email.Replace("@", "at").Replace(".", "dot"); 
    } 
} 

我在一个类中调用该方法进行模糊处理,如下所示:

public class Resolver { 
    public Data GetData() { 
    return new Data { Email = new Mail().Obfuscate(myEmail) }; 
    } 
    public String Translate(string value) { /* Some Code */ } 
} 

的问题是,模糊处理确实在英语置换:@>的。 >点

但在解析器类中的方法不翻译正是我需要的...

我怎样才能“通”的翻译方法将模糊处理方法,所以这一块用它来翻译@和。在当前的语言点和点?

所以里面混淆代码行:

return email.Replace("@", "at").Replace(".", "dot"); 

将成为:

return email.Replace("@", Translate("@")).Replace(".", Translate(".")); 

当翻译将是我“传递”给它的方法。

比你多, 米格尔

+0

我建议像什么呢白话:静态类与翻译方法。如果你不能改变这种情况,请将委托作为参数传递给模糊处理:public String Obfuscate(String email,Func translator) – Eregrith

+0

这正是代表的用途。你可以使用Func。但我相信,应该有更优雅的方式。 –

我认为@ BartoszKP的答案是正确的设计决策。为了完整性,以下是如何做你所问的。

更改邮件采取Func<string,string>

public class Mail { 
    public String Obfuscate(String email, Func<string,string> translate) { 
    return email.Replace("@", translate("at")).Replace(".", translate("dot")); 
    } 
} 

并通过您Translate方法吧:

public class Resolver { 
    public Data GetData() { 
    return new Data { Email = new Mail().Obfuscate(myEmail, Translate) }; 
    } 
    public String Translate(string value) { /* Some Code */ } 
} 

考虑不同的设计:

public interface ITranslator 
{ 
    string Translate(string s); 
} 

public class Obfuscator 
{ 
    public Obfuscator(ITranslator translator) 
    { 
     this.translator = translator; 
    } 

    public string Obfuscate(string email) 
    { 
     var at = translator.Translate("at"); 
     var dot = translator.Translate("dot"); 

     return email.Replace("@", at).Replace(".", dot); 
    } 

    private ITranslator translator; 
} 

public class EnglishTranslator : ITranslator 
{ 
    public string Translate(string s) 
    { 
     return s; 
    } 
} 

public class PolishTranslator : ITranslator 
{ 
    public PolishTranslator() //or `FileInfo dictionaryFile` parameter perhaps 
    { 
     // for simplicity 
     translations = new Dictionary<string, string>(); 
     translations.Add("at", "malpa"); 
     translations.Add("dot", "kropka"); 
    } 

    public string Translate(string s) 
    { 
     return translations[s]; 
    } 

    private Dictionary<string, string> translations; 
} 

但是你真的应该考虑使用ResourceManager。资源相关机制旨在处理翻译。