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

Pass property into a class when creating an instance of an interface

我有这个界面:

public interface IMessage
{
    string Subject { get; }
    string Body { get; }
    string ToAddress { get; }
}

然后是实现它的 class:

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

如果是这样,我该如何修改class/接口来接受参数?

谢谢!

是的 - 只需将构造函数添加到 class...

public class RestoreEntityMessage : IMessage
{
    private string _myvar;

    public RestoreEntityMessage(string myvar)
    {
        _myvar = myvar;
    }

    public string Body
    {
        get { return _myvar + ConfigurationManager.AppSettings["RestoreEntityBody"]; }
    }       
}

接口中不能有构造函数,但这也意味着接口对代码中的任何构造函数都是无关紧要的。

如果您将 class 更改为:

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

一切都应该没问题。

想想接口的作用。它是关于对象外观的契约。它不关心它的创建,只关心它具有您定义的 shape。添加此构造函数不会破坏任何内容,因为您仍在实现接口的成员。