26

我了解如何创建 getter 和 setter

public myClass
{
    public int myVal { get; set; }

    // more stuff
}

但我不明白以后如何调用它。

public myOtherClass
{
    public myOtherClass()
    {
         myClass localMyClass = new myClass();

         localMyClass.???set??? = 42;  
         // Intelisense doesn't seem to give any obvious options after I enter 
         // the period.
    }
}

我应该如何在 localMyClass 中设置 myVal 的值?

4

5 回答 5

24
localMyClass.myVal = 42;

Getter 和 setter 让您可以将值视为公共属性。不同之处在于,您可以在执行获取和设置的函数中做任何您想做的事情。

例子:

存储其他变量

private int _myVal, myOtherVal;
public int MyVal { get; set { _myVal = value; myOtherVal++; } }

组成数字/返回常数

public int MyVal { get { return 99; } set; }

扔掉二传手

private int _myVal;
public int MyVal { get { return _myVal; } set { ; } }

在每种情况下,用户都会觉得它只是一个公共数据成员,只需键入

localMyClass.myVal = 42;
int i = localMyClass.myVal;

gettors 和 settors 让你自己实现。此外,正如 Hogan 所说,“有许多库和附加组件 [例如 MVC.NET] 需要您使用 getter 和 setter 函数”——即使是针对微不足道的{get; set;}情况。

于 2013-03-13T04:12:04.157 回答
11

放:

localMyClass.myVal = 42

得到:

int variable = localMyClass.myVal;
于 2013-03-13T04:04:48.023 回答
6

从外部看,访问 getter 和 setter 的语法与访问变量的语法没有区别。赋值转换为 setter 的调用,而普通表达式使用转换为 getter 的调用。

.在智能感知中,getter 和 setter 列表应在变量名后放置一个点时打开。属性的左侧应该有蓝色标记(与方法左侧的洋红色标记相反)。

于 2013-03-13T04:05:45.780 回答
5

你要这个

localMyClass.myVal = 42;  

调用 setter

还有这个

varName = localMyClass.myVal;

调用吸气剂。

于 2013-03-13T04:04:52.223 回答
2

得到:var tmp = localMyClass.myVal;

放:localMyClass.myVal = 2;

于 2013-03-13T04:04:49.407 回答