我有以下内容:
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, 。 > 点
但是在 Resolver 类中,Translate 方法完全满足了我的需要...
我怎样才能将 Translate 方法“传递”给 Obfuscate 方法,以便这个方法使用它来翻译 @ 和 .到当前语言的 at 和 dot?
Obfuscate 中的代码行:
return email.Replace("@", "at").Replace(".", "dot");
会变成:
return email.Replace("@", Translate("@")).Replace(".", Translate("."));
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
.资源相关机制旨在处理翻译。
关于c# - 如何将 "send"方法转到另一个方法中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19478348/