【问题标题】:How do I call a getter or setter in C#如何在 C# 中调用 getter 或 setter
【发布时间】:2013-03-13 04:03:23
【问题描述】:

我了解如何创建 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的值应该如何设置?

【问题讨论】:

  • 如果它没有出现在智能感知中,那么它可能不是有效的可编译代码?没有标准的ing 类型,如果确实列出了属性设置器,即使它前面没有“设置”,也很难错过找到它。此外,所选择的命名约定刺痛了我的眼睛

标签: c# c#-4.0


【解决方案1】:
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;} 案例。

【讨论】:

  • 因此,如果我在设置值时不需要做任何其他事情,而且我从未打算这样做,并且没有什么会迫使我拥有 getter/setter(如 ASP.NET);除了它是编码成员的正常方式之外没有真正的优势(就像给一个类提供与文件相同的名称 - 您不必这样做,但实际上每个人都这样做)?
  • @CodeSlave - 这只是一个很好的方法,因为它创建了一个数据接口 - 从而分离了数据和实现。
  • @ScottMermelstein - 你确定最后一点吗 - 我认为没有任何东西需要 getter 和 setter。我唯一能想到的就是触发 OnChange 事件,这只是一个设计和实现选择——有许多模式以不同的方式来做这件事(在其他语言中使用——例如 Java)
  • @CodeSlave 是的。如果它只是一个“公共”变量,并且没有任何东西强迫你,那就让它成为一个公共成员。您可以就始终通过访问器的良好样式进行语义争论,但在我看来,这可能是过度的。
  • @Hogan 如果要为 MVC.Net 定义模型,则必须使用访问器而不是公共成员来让服务器自动填充回写的成员。 (我已经被那个烧了好几次了。)在工作表下面,代码正在使用反射并寻找访问器方法。
【解决方案2】:

设置:

localMyClass.myVal = 42

获取:

int variable = localMyClass.myVal;

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      你想要这个

      localMyClass.myVal = 42;  
      

      调用setter

      还有这个

      varName = localMyClass.myVal;
      

      调用getter。

      【讨论】:

        【解决方案5】:

        获取:var tmp = localMyClass.myVal;

        设置:localMyClass.myVal = 2;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-29
          • 1970-01-01
          • 2010-09-26
          • 1970-01-01
          • 2019-01-07
          • 1970-01-01
          • 2014-02-19
          • 2023-03-07
          相关资源
          最近更新 更多