繁体   English   中英

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

[英]Pass property into a class when creating an instance of an 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);

如果是的话,如何修改类/接口以接受参数?

谢谢!

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

如果您将班级更改为此:

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

一切应该没问题。

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

是的-只需在类中添加一个构造函数即可。

public class RestoreEntityMessage : IMessage
{
    private string _myvar;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM