在C#/.NET中使用SaveFileDialog生成“;无法创建抽象类的实例“;错误
本文关键字:创建 抽象类 错误 实例 生成 NET SaveFileDialog | 更新日期: 2023-09-27 17:59:54
所以我一直在努力在.NET应用程序中创建一个"保存"按钮。根据我的研究,我似乎每件事都做对了。我一直将这篇文章作为主要来源:http://msdn.microsoft.com/en-us/library/system.windows.forms.savefiledialog.aspx
以下是我在C#中的方法代码:
private void save2(object A_0, EventArgs A_1)
{
Stream stream = new Stream();
savefile2 = new SaveFileDialog();
savefile2.InitialDirectory = @"C:'Program Files'Folder'";
savefile2.Filter = "Text files (*.txt)|*.txt|Word files (*.doc)|*.doc";
savefile2.FilterIndex = 1;
savefile2.FileName = "*.txt";
savefile2.Title = "Save Box Text";
savefile2.OverwritePrompt = true;
if (savefile2.ShowDialog() == DialogResult.OK)
{
stream = savefile2.OpenFile();
if (stream != null)
{
stream.Close();
}
}
}
当运行程序时,我点击"保存"按钮,看看它是否会打开一个对话框,它会产生以下错误:
"无法创建抽象类的实例。"
但是,我没有使用任何抽象类。所有的类都在.NET框架中。所以,我被卡住了。如有任何帮助,我们将不胜感激。
正如前两张海报所提到的,您不能在Stream类上调用new,因为它是抽象的,下面是您的代码的编译版本以供参考
private SaveFileDialog savefile2;
private void save2(object A_0, EventArgs A_1)
{
savefile2 = new SaveFileDialog
{
InitialDirectory = @"C:'Program Files'Folder'",
Filter = "Text files (*.txt)|*.txt|Word files (*.doc)|*.doc",
FilterIndex = 1,
FileName = "*.txt",
Title = "Save Box Text",
OverwritePrompt = true
};
if (savefile2.ShowDialog() == DialogResult.OK)
{
using (FileStream stream = File.Open(savefile2.FileName, FileMode.OpenOrCreate))
{
//do stuff
}
}
}
请注意,最好将流实例化封装在using(){}块中,以确保它们被正确处理
Stream类是抽象的,您正试图在第1行中创建它的实例。您实际上从来没有使用过在那里创建的对象,所以要么在声明中不给它分配任何东西,要么给它分配null
。
问题是Stream
是一个抽象类,因此不能像使用Stream stream = new Stream();
那样构造。将该行更改为Stream stream;
,它应该可以工作。