如何将一个方法“发送”到另一个方法内部
本文关键字:方法 发送 内部 另一个 一个 | 更新日期: 2023-09-27 18:36:04
>我有以下内容:
public class Mail {
public String Obfuscate(String email) {
return email.Replace("@", "at").Replace(".", "dot");
}
}
我在类中调用该方法 Obfuscate,如下所示:
public class Resolver {
public Data GetData () {
return new Data { Email = new Mail().Obfuscate(myEmail) };
}
public String Translate(string value) { /* Some Code */ }
}
问题是 Obfuscate 用英语进行替换:@> at,.>点
但是在解析器类中,翻译方法完全符合我的需求......
如何将翻译方法"传递"到混淆方法,以便此方法使用它来翻译当前语言中的@和.到at和dot?
所以 Obfuscate 中的代码行:
return email.Replace("@", "at").Replace(".", "dot");
将成为:
return email.Replace("@", Translate("@")).Replace(".", Translate("."));
其中翻译将是我"传递"给它的方法。
比你,米格尔
考虑一个不同的设计:
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
。资源相关机制旨在处理翻译。
我认为@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 */ }
}