0

我从其他地方获取了这段代码,以便有效地显示和隐藏表单。虽然我了解其中的大部分内容,但我不明白 get 在这种情况下和一般情况下的作用。这可以解释吗?WinForms

public class FormProvider
{
    public static Form1 frm1
    {
        get
        {
            if (_frm1 == null)
            {
                _frm1 = new Form1();
            }
            return _frm1;
        }
    }
4

4 回答 4

5

它只不过是自动生成函数的语法包装器

public static Form1 get_frm1()
{       
   return _frm1;       
}

所以每次你引用FormProvider.frm1时,就像你在打电话FormProvider.get_frm1()

实际上,如果您尝试编写如下代码:

public class A {

    public string Name {get;}

    public string get_Name() {
       return "James Bond";
    }
}

它将给出编译时错误,因为存在定义冲突。

于 2013-01-25T15:21:36.890 回答
1

这些在 C#中称为属性

属性是一种封装字段的方式,可以使用这些所谓的“Getter”和“Setter”方法访问它们,这些方法可以包含所需的任何逻辑。

在这种情况下,“Getter”将返回您的现有实例Form1(如果有)或创建一个新实例(如果没有找到),将其分配给该_form1字段并返回。

我建议您研究上面的链接以进一步了解。

于 2013-01-25T15:30:18.407 回答
0

它用作属性的getter方法

来自 MSDN


属性结合了字段和方法的各个方面。对于对象的用户来说,属性似乎是一个字段,访问该属性需要相同的语法。对于类的实现者来说,属性是一个或两个代码块,代表一个 get 访问器和/或一个 set 访问器。get 访问器的代码块在读取属性时执行;set 访问器的代码块在属性被分配一个新值时执行。没有 set 访问器的属性被认为是只读的。没有 get 访问器的属性被认为是只写的。具有两个访问器的属性是可读写的。

与字段不同,属性不属于变量。因此,您不能将属性作为 ref(C# 参考)或 out(C# 参考)参数传递。


设置访问器

set 访问器类似于返回类型为 void 的方法。它使用一个名为 value 的隐式参数,其类型是属性的类型。在以下示例中,将 set 访问器添加到 Value 属性:

**When you assign a value to the property, the set accessor is invoked by using an argument that provides the new value**

例如考虑这个类

class DemoClass
{
    private int value;
    public Int32 Value
    {
        get 
        { 
            return value;
        }
        set
        {
            this.value = value;
        }
    }
}

如果查看反射器中的编译程序集,您会注意到

.class private auto ansi beforefieldinit DemoClass
    extends [mscorlib]System.Object
{
    .method public hidebysig specialname rtspecialname instance void .ctor() cil managed
    {
        .maxstack 8
        L_0000: ldarg.0 
        L_0001: call instance void [mscorlib]System.Object::.ctor()
        L_0006: ret 
    }


    .property instance int32 Value
    {
        .get instance int32 ConsoleApplication1.DemoClass::get_Value()
        .set instance void ConsoleApplication1.DemoClass::set_Value(int32)
    }


    .field private int32 value

}
于 2013-01-25T15:22:28.033 回答
0

frm1是一个属性。

属性通常有一个 getterget和一个可选的 setter set

这些用于在访问您的Property

在这种情况下,如果属性的支持者_frm1(即字段)是null,则 getter 负责将其设置为 的新实例Form1

于 2013-01-25T15:29:04.690 回答