根據您的澄清意見,這聽起來像你要麼需要一些工具類或工廠類。也許喜歡的東西如下:
public interface IFileOpener
{
public bool PresentFileOpenDialogToUser();
public string RequestedFilePath { get; }
}
public class DefaultFileOpener : IFileOpener
{
private string filePath = default(string);
public bool PresentFileOpenDialogToUser()
{
OpenFileDialog ofd = new OpenFileDialog();
DialogResult dr = ofd.ShowDialog();
if (dr == DialogResult.Cancel)
{
this.filePath = default(string);
return false;
}
else
{
this.filePath = ofd.FileName;
return true;
}
}
public string RequestedFilePath
{
get
{
return this.filePath;
}
}
}
public class FileOpenerFactory
{
public static IFileOpener CreateFileOpener()
{
return new DefaultFileOpener();
}
}
而且在你的表格:
private void btnOpenFile_Click(object sender, EventArgs e)
{
IFileOpener opener = FileOpenerFactory.CreateFileOpener();
if (opener.PresentFileOpenDialogToUser())
{
//do something with opener.RequestedFilePath;
}
}
你甚至可以在你的主要形式做了部分類的東西,所以你有類似
private void btnOpenFile_Click(object sender, EventArgs e)
{
this.OpenMyFile();
}
和在你的部分課程中你有:
public partial class Form1
{
private void OpenMyFile()
{
IFileOpener opener = FileOpenerFactory.CreateFileOpener();
if (opener.PresentFileOpenDialogToUser())
{
//do something with opener.RequestedFilePath;
}
}
}
很多時候,使用部分類作爲接口或專注功能的實現非常有用。
你不能從密封類繼承,你有可能不想做你認爲你在做什麼?你可以擴展一個類來改進/修改它的功能。這聽起來像你想在你的表單上做部分課程。 – 2012-07-26 18:50:07
因此,我只需製作另一個表單類,並將所有文件打開邏輯?我只想說「好的,所以用戶想打開一個文件,我不在乎你是怎麼做的,只是以某種方式提示他,並從用戶那裏返回一些東西」。我可能會用一組不同的方法來打開文件,但是我的主窗體類不應該知道任何關於它的信息。 – MxyL 2012-07-26 18:52:57
我並不十分理解你的追求,但它聽起來像你需要使用一些工廠類來滿足你的願望。我會在代碼中澄清。 – 2012-07-26 19:08:52