传递类作为参数
问题描述:
我有一个表单,我做了一些验证。当我实例化表单时,我传递一个类作为参数,然后我可以更新该类的值。传递类作为参数
Bussines _bussines = new Bussines();
public frmUsuario(Bussines b)
{
_bussines = b;
InitializeComponent();
}
实例化形式
frmUsuario fUsuarios = new frmUsuario(this);
fUsuarios.ShowDialog();
所以,我的问题是:根据OOP,它是确定做什么?这对我来说似乎很懒,但我不知道更简单的选择。有更好的选择吗?
对不起,我的英语,它不是我的母语。
答
清洁和更间接的方式是使用接口。
IMO
- 窗体构造函数不应该依赖于一个参数
- 的形式应该是能够在没有任何特定的(Businees)显示
- 您的形式应该表现出根据一个很好的UX其状态
但是正如其他人聪明地指出的,任何事情都可能是正确的,更重要的是不设置tra通过这样的限制将来对你自己。
实施例:
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class Business
{
}
public interface IBusinessHandler
{
Business Business { get; set; }
void Execute();
}
public partial class Form1 : Form, IBusinessHandler
{
public Form1()
{
InitializeComponent();
}
#region IBusinessHandler Members
public Business Business { get; set; }
public void Execute()
{
// check that we can continue
if (Business == null)
{
MessageBox.Show("Business property not set");
// or whatever else appropriate
return;
}
// do some work on it
var s = Business.ToString();
MessageBox.Show("Work done !");
}
#endregion
}
internal class Demo
{
public Demo()
{
IBusinessHandler handler = new Form1();
handler.Business = new Business();
handler.Execute();
}
}
}
答
答案是否定的,因为.NET代码期望的形式的参数构造。
想想你如何使用OpenFileDialog
。您创建一个实例,然后分配属性。这里也是一样。
{
Business item=new Business() { Name="Yoko" };
//
BusinessForm dlg=new BusinessForm();
dlg.Business=item;
if (dlg.ShowDialog()==DialogResult.OK)
{
item=dlg.Business;
}
}
与表单代码
public class Business
{
public string Name { get; set; }
public bool IsOk { get { return !string.IsNullOrEmpty(Name); } }
}
public partial class BusinessForm : Form
{
Business business;
public BusinessForm()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.business=new Business();
}
public Business Business
{
get { return business; }
set { business=value; }
}
public bool IsOk { get { return business.IsOk; } }
}
的'Bussines _bussines =新Bussines();'可以只是'Bussines _bussines;'如果你没有任何其他的构造函数不设置价值到'_bussines'。不需要两次创建对象。 –
此外,这是WPF还是Winforms?如果它是WPF,那么有更好的方法可以将它传递给构造函数。 –
谢谢你,我已经改变了我的代码。这是winforms。我想我应该在问题上添加标签 – Vlocks