这些物体在功能上是否相等?

时间:2017-01-24 19:38:25

标签: c# initialization declaration assign

我正在为表单按钮创建一个上下文菜单,我遇到了这种实现它的方式,它与我预期的不同。如果有的话可以解释两者之间的差异吗?

我认为它的工作方式:

private void InitializeContextMenu()
{
    System.Windows.Forms.ContextMenuStrip set_is_in_inventory = new System.Windows.Forms.ContextMenuStrip();
}

private System.Windows.Forms.ContextMenuStrip set_is_in_inventory;

我在msdn上找到的方式:

private void InitializeContextMenu()
{
    set_is_in_inventory = new System.Windows.Forms.ContextMenuStrip();
    this.ContextMenuStrip = set_is_in_inventory;
}

private System.Windows.Forms.ContextMenuStrip set_is_in_inventory;

1 个答案:

答案 0 :(得分:1)

在第一个版本中,您已在InitializeContextMenu()中实例化了一个名为set_is_in_inventory的新变量,其类型为ContextMenuStrip,正如评论者所指出的那样,它应该被命名为_setIsInInventory遵循.NET命名约定。无论如何。你实际上并没有在任何地方使用这个变量。它没有方法之外的范围,也没有做任何事情。我认为你想要的是设置类的属性。要使类set_is_in_inventory属性成为您刚刚实例化的属性,您需要执行

private void InitializeContextMenu(){
{
    this.set_is_in_inventory = new System.Windows.Forms.ContextMenuStrip();
}

或者可选地,

set_is_in_inventory = new System.Windows.Forms.ContextMenuStrip();

这是MSDN示例中的第一行。在MSDN示例中,您可能会感到困惑的是,该类看起来还有另一个名为ContextMenuStrip的属性,该属性也在第二行中设置。这也被设置为set_is_in_inventory。有时类属性的名称是类的名称,如此(完全合法的语法):

public ClassA {
    public Class Class {get;set;}
}

要设置ClassA's 属性 Class,您只需

this.Class = new Class();

Class = new Class();

您可以看到这可能会让人感到困惑,因此很多人只是将该属性命名为与类名不同,如下所示:

public ClassA{
    public Class MyClass {get;set;}
}

HTH。