创建接口实例时将属性传递给类

时间:2017-07-11 16:03:52

标签: c# asp.net .net interface

我有这个界面:

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

如果是这样,我如何修改类/接口以接受参数?

谢谢!

2 个答案:

答案 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"]; }
    }       
}