我有这个界面:
public interface IMessage
{
string Subject { get; }
string Body { get; }
string ToAddress { get; }
}
然后是一个实现它的类:
public class RestoreEntityMessage : IMessage
{
public string Subject
{
get { return ConfigurationManager.AppSettings["RestoreEntitySubject"]; }
}
public string Body
{
get { return ConfigurationManager.AppSettings["RestoreEntityBody"]; }
}
public string ToAddress
{
get { return ConfigurationManager.AppSettings["EntitryToAddress"]; }
}
}
然后当它被使用时:
IMessage message = new RetireEntityMessage();
但是,我需要将一个字符串传递给Body
,每个实例都是唯一的。所以,回到RestoreEntityMessage
我需要做这样的事情:
public string Body
{
get { return myVar + ConfigurationManager.AppSettings["RestoreEntityBody"];
}
但我不知道如何在那里获得myVar
。我可以这样做吗?
IMessage message = new RetireEntityMessage(myVar);
如果是这样,我如何修改类/接口以接受参数?
谢谢!
答案 0 :(得分:2)
您不能在接口中使用构造函数,但这也意味着您的接口对代码中的任何构造函数都无动于衷。
如果您将课程更改为:
public class RestoreEntityMessage : IMessage
{
private string _someString;
public RetireEntityMessage(string someString)
{
_someString = someString;
}
public string Body
{
get { return _someString + ConfigurationManager.AppSettings["RestoreEntityBody"];
}
public string Subject
{
get { return ConfigurationManager.AppSettings["RestoreEntitySubject"]; }
}
public string ToAddress
{
get { return ConfigurationManager.AppSettings["EntitryToAddress"]; }
}
}
一切都应该没问题。
考虑一下界面的作用。它是一个对象看起来像什么的合同。它不关心它的创建,只关心它具有你定义的形状。添加此构造函数不会破坏任何内容,因为您仍在实现接口的成员。
答案 1 :(得分:1)
是的 - 只需在类中添加一个构造函数...
public class RestoreEntityMessage : IMessage
{
private string _myvar;
public RestoreEntityMessage(string myvar)
{
_myvar = myvar;
}
public string Body
{
get { return _myvar + ConfigurationManager.AppSettings["RestoreEntityBody"]; }
}
}