我有一个接口后面的类。我们称之为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
?
答案 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
。
_stuffId
因private
而无法访问。如果希望构造函数管理它的设置方式,可以将变量包装在属性中以显示它或仅使用属性与私有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;
}
}
但这样做会允许更改