访问另一个类中的类构造函数变量'功能

时间:2014-04-17 15:18:35

标签: c# winforms

我有一个接口后面的类。我们称之为DoStuff,它看起来像这样:

public class DoStuff : IDoStuff
{
    private int _stuffId; //class variable

    public DoStuff(int stuffId)
    {
      _stuffId = stuffId;
    }
    ...
}

在另一个课程中,我们将其称为Home,按钮逻辑如下所示:

public partial class Home : Form
{
   private readonly IStuffPresenter _presenter;

   public Home(DoStuff doStuff)
   {
      InitializeComponent();
      _presenter = new StuffPresenter(doStuff);
      homeText.Text = doStuff.HomeText;
   }

   private void showLater_Click(object sender, EventArgs e)
   {

      int stuffId = //???
      .....
      showLater.Arguments.Add(string.Format("<StuffID>{0}</StuffID>", stuffId)); //how it's being used
   }

我在stuffId类中使用DoStuff,我希望能够在此处使用它,而无需编写与再次获取ID相关的所有代码。如何从我的Home类(这是一个表单)中的按钮单击事件中的stuffId类中访问DoStuff

2 个答案:

答案 0 :(得分:1)

现在您已经提供了更多代码,解决方案变得清晰。

问题的第一部分是设置_stuffId的可访问性,以便可以在类范围之外使用它。为此,我建议将其设为公共财产:

public class DoStuff : IDoStuff
{
    public int StuffId { get; set; } //class property

    public DoStuff(int stuffId)
    {
      StuffId = stuffId;
    }
    //...
}

问题的下一部分是您需要能够在点击事件中访问DoStuff的实例。使用您拥有的代码,我建议创建一个类级别变量来存储它。然后,您可以从构造函数中设置它,然后在您的单击事件中使用它,如下所示:

public partial class Home : Form
{
   private readonly IStuffPresenter _presenter;
   private DoStuff _doStuff;//store it here so all functions can see it

   public Home(DoStuff doStuff)
   {
      InitializeComponent();
      _doStuff = doStuff;//set the class variable here so we can use it later
      _presenter = new StuffPresenter(doStuff);
      homeText.Text = doStuff.HomeText;
   }

   private void showLater_Click(object sender, EventArgs e)
   {

      int stuffId = _doStuff.StuffId;//we can access the instance here now
      //.....
      showLater.Arguments.Add(string.Format("<StuffID>{0}</StuffID>", stuffId)); //how it's being used
   }

当然,有可能通过StuffPresenter访问该值,但在不知道其实现的情况下我无法确定

答案 1 :(得分:0)

尝试更改您的课程以展示_stuffId

_stuffIdprivate而无法访问。如果希望构造函数管理它的设置方式,可以将变量包装在属性中以显示它或仅使用属性与私有setter。

public class DoStuff : IDoStuff
{
    public int StuffId { get; private set; }    

    public DoStuff(int stuffId)
    {
        StuffId = stuffId;
    }
}

允许您访问它但不更改它:

int stuffId = stuff.StuffId;

或者,您可以更改_stuffId的辅助功能:

public class DoStuff : IDoStuff
{
    public int _stuffId;

    public DoStuff(int stuffId)
    {
        _stuffId = stuffId;
    }
}

但这样做会允许更改