get在c#中做什么?

get在c#中做什么?,c#,forms,get,C#,Forms,Get,为了有效地显示和隐藏表单,我从其他地方获取了这段代码。虽然我了解其中的大部分,但我不明白get在这种情况下和一般情况下做了什么。这可以解释吗? WinForms 它只是自动生成函数上的语法包装器 public static Form1 get_frm1() { return _frm1; } 因此,每次引用FormProvider.frm1,就像调用FormProvider.get\u frm1() 事实上,如果您尝试编写如下代码: public class

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


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

public static Form1 get_frm1()
{       
   return _frm1;       
}
因此,每次引用
FormProvider.frm1
,就像调用
FormProvider.get\u frm1()

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

public class A {

    public string Name {get;}

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

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

这只是自动生成函数的语法包装

public static Form1 get_frm1()
{       
   return _frm1;       
}
因此,每次引用
FormProvider.frm1
,就像调用
FormProvider.get\u frm1()

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

public class A {

    public string Name {get;}

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

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

its用作属性的getter方法

来自MSDN
属性结合了字段和方法的各个方面。致 一个对象、一个属性似乎是访问该属性的字段 需要相同的语法。对于类的实现者来说,属性是 一个或两个代码块,表示get访问器和/或集合 存取器。get访问器的代码块在 属性被读取;设置访问器的代码块在以下情况下执行: 将为该特性指定一个新值。没有集合的属性 访问器被认为是只读的。没有get访问器的属性是 认为只写。同时具有两个访问器的属性是 读写

与字段不同,属性未分类为变量。所以,, 不能将属性作为ref(C#Reference)或out(C)传递# 参考)参数


集合存取器 集合访问器类似于返回类型为void的方法。它使用 一个名为value的隐式参数,其类型为 财产。在下面的示例中,集合访问器被添加到 价值属性:

以这个类为例

class DemoClass
{
    private int value;
    public Int32 Value
    {
        get 
        { 
            return value;
        }
        set
        {
            this.value = value;
        }
    }
}
如果在反射器中查看已编译的组件,u会注意到类似的情况

.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

}

its用作属性的getter方法

来自MSDN
属性结合了字段和方法的各个方面。致 一个对象、一个属性似乎是访问该属性的字段 需要相同的语法。对于类的实现者来说,属性是 一个或两个代码块,表示get访问器和/或集合 存取器。get访问器的代码块在 属性被读取;设置访问器的代码块在以下情况下执行: 将为该特性指定一个新值。没有集合的属性 访问器被认为是只读的。没有get访问器的属性是 认为只写。同时具有两个访问器的属性是 读写

与字段不同,属性未分类为变量。所以,, 不能将属性作为ref(C#Reference)或out(C)传递# 参考)参数


集合存取器 集合访问器类似于返回类型为void的方法。它使用 一个名为value的隐式参数,其类型为 财产。在下面的示例中,集合访问器被添加到 价值属性:

以这个类为例

class DemoClass
{
    private int value;
    public Int32 Value
    {
        get 
        { 
            return value;
        }
        set
        {
            this.value = value;
        }
    }
}
如果在反射器中查看已编译的组件,u会注意到类似的情况

.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

}

frm1
是一个属性

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

这些用于在访问
属性时提供特殊实现


在这种情况下,如果属性的后台
\u frm1
(这是一个字段)是
null
,则getter负责将其设置为
Form1
frm1
是一个属性的新实例

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

这些用于在访问
属性时提供特殊实现

在这种情况下,如果属性的后台程序
\u frm1
(这是一个字段)是
null
,则getter负责将其设置为
Form1
的新实例,这些实例在C中调用#

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

在这种情况下,“Getter”将返回
表单1
的现有实例(如果有),或者创建一个新实例(如果没有找到),将其分配到
\u表单1
字段并返回该实例

我建议你研究一下上面的链接,以便进一步理解。

这些在C中被称为#

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

在这种情况下,“Getter”将返回
表单1
的现有实例(如果有),或者创建一个新实例(如果没有找到),将其分配到
\u表单1
字段并返回该实例


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

…它不是一种getter方法吗?如何将
get
作为属性设置器?即使是这样,如果你想得到答案,你也需要提供更多的信息。事实上,这充其量只是对原始问题的一个评论。@KenWhite-我的错,打字错误!如果希望这是一个答案,您仍然需要添加更多内容。当然。:-)我只是想再找几句话来解释你的答案,不过。:-。。。它不是一个getter方法吗?
get
是一个属性设置器吗?即使是这样,如果你想得到答案,你也需要提供更多的信息。事实上,这充其量只是对原始问题的一个评论。@KenWhite-我的错,打字错误!你还需要