C# (有效地)向COM互操作公开OpenFileDialog属性

C# (有效地)向COM互操作公开OpenFileDialog属性,c#,com-interop,C#,Com Interop,我转售了一种使用VBS增强其形式的产品。从VBS显示OpenFileDialog不再是一件小事,因为Vista(我相信,我不记得了)。但是,我也可以选择使用COM互操作来提供.Net dll。因此,我认为在其中包含一个文件选择器可能是一个好主意 在这个程序集中,我目前有以下(示例)代码,运行良好: [ComVisible(true)] [ProgId("BlaBla.FilePicker")] [Guid("xxx-xxx-xxx-xxx")] [ClassInterface(ClassInte

我转售了一种使用VBS增强其形式的产品。从VBS显示OpenFileDialog不再是一件小事,因为Vista(我相信,我不记得了)。但是,我也可以选择使用COM互操作来提供.Net dll。因此,我认为在其中包含一个
文件选择器
可能是一个好主意

在这个程序集中,我目前有以下(示例)代码,运行良好:

[ComVisible(true)]
[ProgId("BlaBla.FilePicker")]
[Guid("xxx-xxx-xxx-xxx")]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IFilePicker))]
public class FilePicker : IFilePicker
{
    public string Show()
    {
        using (OpenFileDialog openFileDialog = new OpenFileDialog())
        {
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                return openFileDialog.FileName;
            }
        }
        return string.Empty;
    }
}
但是,我想做的是公开
OpenFileDialog
的属性(至少部分),以便设置初始位置和过滤器等

事实证明,这非常困难
OpenFileDialog
是一个密封类,其基类
FileDialog
不打算从中继承

我可以简单地通过硬编码来公开这些选项,实际上是模仿
FileDialog
属性

但这似乎相当低效。理想情况下,我想简单地继承fom一些基类或接口,然后实现它


这是可行的吗?

为什么不直接在IFilePicker中添加参数。例如:

public string Show(string initialDirectory)
{
    using (OpenFileDialog openFileDialog = new OpenFileDialog())
    {
        openFileDialog.InitialDirectory = initialDirectory;
        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            return openFileDialog.FileName;
        }
    }
    return string.Empty;
}

因为这需要很多的争论。这将意味着大量的重载。您还可以在调用Show()之前在IFilePicker上声明调用方可以设置的属性。这就是想法,问题是如何在不全部键入的情况下包含它们
FileDialog
有很多属性……您试图优化定义类所需的键入量?这是一个奇怪的事情优化。我不会称之为优化。这只是我的懒惰。不过,它有一个重要的组成部分:我不知怎么地期望有某种接口可以实现,因为这就是基本的功能性。我只是很惊讶没有。这可能就是我。当然,程序员更喜欢继承而不是封装,这样做工作量更少。但这里不是一个选项,封装是一个硬要求。您正在使用COM来使用封装COM接口的.NET类。讨厌三次,但VBS不允许您直接使用此COM接口,因为它与自动化不兼容。谷歌“vbscript openfiledialog”借用其他人的代码,但它看起来确实不应该使用任何代码:)我不太确定我是否能跟上你。我只想从我的VBS中获得一个OpenFileDialog(或任何为此选择文件的对话框)。我当前的脚本是通过“动态”编写和执行PowerShell来完成的,而VBS是我唯一的选择。我正在寻找提供替代方案的方法。你是说我不应该?