【问题标题】:Writing Method in C# Which Creates Instance Of Class Using Parameter在 C# 中编写使用参数创建类实例的方法
【发布时间】:2014-03-31 08:30:28
【问题描述】:

一个基本问题:我正在编写一个有菜单的 C# 应用程序,每个菜单项都会打开一个新窗口。窗口都将是 Window 类的实例。

而不是写:(EditSettings 是目标窗口的所需名称)

Window EditSettings = new Window();
EditSettings.Show();

对于每一个,我可以不写一个类似下面的方法来创建实例吗?

private void OpenSelectedWindow(Window n)
{
    n = new Window();
    n.Show();
}

我无法调用该方法 - 我试过了:

OpenSelectedWindow(EditSettings);

哪个不起作用(“名称 EditSettings 在当前上下文中不存在”),或者

OpenSelectedWindow(Window EditSettings);

也不行

我对 C# 很生疏,问这个问题感觉像个傻瓜,但我似乎在互联网上找不到这样的例子。您可以使用方法创建类的实例吗?我错过了什么?谢谢。

编辑

代码全部发生在主命名空间中:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    // Attempting to write a method that instances the class
    private void OpenSelectedWindow(Window n)
    {
        n = new Window();
        n.Show();

    }

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        //Calling the method
        OpenSelectedWindow(EditSettings);
    }
}

我有两个 .xaml 文件 - EditSettings.xaml(空)和 MainWindow.xaml。

【问题讨论】:

  • 不清楚您的方法在哪里声明或尝试使用它的代码在哪里。另外,如果您要忽略它的值,为什么还要使用参数呢?您绝对可以在方法中创建一个类的实例,但我怀疑这不是您真正感兴趣的。不幸的是,很难看到您在它的问题中试图做什么当前形式。
  • 对不起,我没有意识到您需要更多代码,我会编辑并添加更多。
  • 嗯,它比其他任何东西都更清晰。例如,“EditSettings 是目标窗口的所需名称”是什么意思?您实际上是在谈论从Window 创建不同类型的派生 实例,并且您有一个名为EditSettings
  • 基本上,如果我采用 OpenSelectedWindow 方法,并将 EditSettings 作为参数传递,只要方法中有“n”,我就会用“EditSettings”(如字符串)替换它,如果一切正常,它将创建一个名为 EditSettings 的新窗口。
  • 一个对象没有被“称为”任何东西。 变量 有名称,但不清楚这是否是您所追求的……方法中的变量名称与其他地方无关。如果您对设置窗口的Name 属性感兴趣,那么只需通过字符串设置该属性即可。

标签: c# wpf methods parameters window


【解决方案1】:

您可以为此使用泛型:

private T OpenSelectedWindow<T>() where T : Window, new()
{
    T n = new T();
    n.Show();
    return n;
}

使用这样的方法:

EditSettings editSettingsWindow = OpenSelectedWindow<EditSettings>();

【讨论】:

  • 怀疑这可能是 OP 所追求的,是的。这个问题对我来说似乎仍然很不清楚,但是......
  • 同意,但这个问题看起来很像是在 OP 不知道泛型和/或反射的情况下尝试做到这一点。
猜你喜欢
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多