2016-08-22 226 views
1

我有一個表單,我做了一些驗證。當我實例化表單時,我傳遞一個類作爲參數,然後我可以更新該類的值。傳遞類作爲參數

Bussines _bussines = new Bussines(); 

public frmUsuario(Bussines b) 
{ 
    _bussines = b; 
    InitializeComponent(); 
} 

實例化形式

frmUsuario fUsuarios = new frmUsuario(this); 
fUsuarios.ShowDialog(); 

所以,我的問題是:根據OOP,它是確定做什麼?這對我來說似乎很懶,但我不知道更簡單的選擇。有更好的選擇嗎?

對不起,我的英語,它不是我的母語。

+3

的'Bussines _bussines =新Bussines();'可以只是'Bussines _bussines;'如果你沒有任何其他的構造函數不設置價值到'_bussines'。不需要兩次創建對象。 –

+0

此外,這是WPF還是Winforms?如果它是WPF,那麼有更好的方法可以將它傳遞給構造函數。 –

+0

謝謝你,我已經改變了我的代碼。這是winforms。我想我應該在問題上添加標籤 – Vlocks

回答

2

清潔和更間接的方式是使用接口。

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(); 
     } 
    } 
} 
+0

你真的需要這個界面嗎?只要公開財產,你就完成了。 – ja72

+0

沒錯,我的意思是我們可以在這方面進行無休止的辯論;我的例子只是我腦海中出現的第一件事:) – Aybe

+0

如果你有多個表單與'Business'類交互並且你想要一個共同的'API',那麼這將是有意義的。 – ja72

1

答案是否定的,因爲.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; } } 
}