繁体   English   中英

在C#/。NET中使用SaveFileDialog产生“无法创建抽象类的实例”错误

[英]Using SaveFileDialog in C#/.NET producing “Instances of abstract class cannot be created” error

因此,我一直在努力在.NET应用程序中创建一个“保存”按钮。 根据我的研究,我似乎做得正确。 我一直将本文作为主要来源: http : //msdn.microsoft.com/zh-cn/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 = new Stream(); 将该行更改为Stream stream; 它应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM