为什么我不能在 setter 中放置属性名称而不是“value”关键字?

2024-03-14

当我通过 setter 中分配一个值时value关键字,它有效。但是,为什么当我尝试通过属性名称分配值时它不起作用,该属性应该保存相同的分配值?

在下面的例子中,我使用valuesetter 中的关键字,它工作得很好,我得到了预期的输出 -

private int i = 1;
public int prop
{ 
    get { return i; }
    set { i = value }
}

public void Print()
{
    Console.WriteLine(i)
}

static void Main ()
{
    Program p = new Program();
    p.prop = 5;
    Console.WriteLine(p.prop);   // outputs 5
    p.Print();                   // outputs 5
}

但在下面的示例中,我使用属性名称prop代替value关键字,并且它不会将新值分配给i多变的 -

private int i = 1;
public int prop
{ 
    get { return i; }
    set { i = prop }
}

public void Print()
{
    Console.WriteLine(i)
}

static void Main ()
{
    Program p = new Program();
    p.prop = 5;
    Console.WriteLine(p.prop);   // outputs 1
    p.Print();                   // outputs 1
}

那么区别是什么呢?为什么我不能使用应该保存新值的属性名称,而不是value关键词?


因为它不一样。这个二传手:

public int prop
{ 
    get { return i; }
    set { i = prop; } // here
}

将阅读current的价值prop通过在其上方的行调用其 getter 方法。关键词value专门用于获取要设置的值,您不能将其交换为属性名称,因为这意味着其他含义。

See the docs https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/using-properties#the-set-accessor:

set 访问器类似于返回类型为 void 的方法。它使用一个名为的隐式参数value,其类型是属性的类型。

[...]

当您为属性分配值时,将使用提供新值的参数来调用 set 访问器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能在 setter 中放置属性名称而不是“value”关键字? 的相关文章

随机推荐

  • 模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用

    我的型号 public class EmployeeModel Required StringLength 50 Display Name Employee Name public string EmpName get set Requir
  • Java将GIF图像转换为PNG格式

    我必须构建一个 Java servlet 它接收图像并返回转换为 PNG 格式的图像 我怎样才能实现这个目标 正如一些示例所示 转换并不是指更改文件扩展名 提前致谢 试试这个 package demo import javax imagei
  • R 中 %in% 运算符的 C++ 版本

    C 中有没有相当于的函数 in R 中的运算符 考虑 R 中的以下命令 which y in x 我试图在 C 中找到等效的东西 特别是在犰狳中 但我找不到任何东西 然后我编写了自己的函数 与上面的 R 命令相比 它非常慢 这是我写的 in
  • 目前使用 Rails 构建 Facebook 应用程序的资源有哪些? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找使用 Rails 构建一个基本的 Facebook 应用程序 您推荐哪些资源 书籍 播客 截屏视频 博客文章等 请每个帖子一个答
  • 使用 Pandas.rolling 计算滚动自相关

    我正在尝试使用 Pandas 0 23 3 计算 Series 对象的滚动自相关 设置示例 dt index pd date range 2018 01 01 2018 02 01 freq B data np random rand le
  • 在 Perl 中可以将一个数组的地址分配给另一个数组吗?

    在以下 C 代码中 int X new int 2 X 0 1 X 1 2 int Y X X 1 3 执行后 Y 1 也将为 3 因为操作 Y X 不会进行克隆 而是将 X 所指向的引用或指针分配给 Y 如果在 Perl 5 下尝试相同的
  • constexpr 函数内的编译时或运行时检测

    当 C 11 中引入 constexpr 时 我很兴奋 但不幸的是我对其有用性做出了乐观的假设 我假设我们可以在任何地方使用 constexpr 来捕获文字编译时常量或文字编译时常量的任何 constexpr 结果 包括如下所示 const
  • 更新推送接收时应用程序图标上的徽章计数 (IOS)

    我正在开发可以从服务器接收推送通知的应用程序 从服务器发送推送通知时 您可以指定要在应用程序图标上显示的徽章编号 现在这意味着您必须跟踪服务器上的徽章计数 这似乎不是一个好的方法 有没有什么好的替代方案 这样我就不需要跟踪服务器上的徽章编号
  • 在 NSView 上使用 NSPoint 鼠标跟踪

    我在 App Delegate 中有一个方法可以创建窗口和内容视图 但我希望能够在进入和退出视图时使用 NSPoint 跟踪鼠标 问题是我不想创建 NSView 自定义类 而是想在我的 AppDelegate 中完成这一切 鼠标跟踪 底部
  • 简单的 PowerShell LastWriteTime 比较

    我需要一个 PowerShell 脚本来访问文件的属性并发现最后写入时间属性并将其与当前日期进行比较并返回日期差 我有这样的东西 writedate Get ItemProperty Path source Name LastWriteTi
  • 使用 Android Studio 未选择渲染目标

    我的 Android Studio 在 Activity main xml 中显示此问题 渲染问题未选择渲染目标 帮助 您需要运行 AVD 管理器来添加与您的项目设置的目标 API 版本相匹配的虚拟设备 单击工具 gt Android gt
  • Maven:如何重命名项目的war文件?

    我有一个项目bird具有以下组件pom xml
  • 具有内联模型表单或表单集的基于 django 类的视图

    我有以下型号 class Bill models Model date models DateTimeField Date of bill null True blank True class Item models Model name
  • 未找到 JSF2.0 标签

    最近我一直在玩 JSF2 0 Richface 3 3 3 我使用 STS 作为我的 IDE 和 Maven 来构建我的项目 但不知何故我无法让以下 JSF2 0 标签工作 h button h link f 元数据 f viewParam
  • 如何解耦小部件的模型/视图

    我正在编写一个应用程序 用于绘制小部件 菜单 控件等以创建应用程序模型 每个屏幕都表示为小部件的集合 每个小部件都是简单的类 例如 class Model object def init self self widgets class Wi
  • 将长格式转换为宽格式

    id lt c 1 8 1 8 age1 lt c 7 5 6 7 8 6 9 5 8 7 6 3 9 5 age2 lt age1 round runif 1 1 3 1 age lt c age1 age2 tanner lt samp
  • ng-bootstrap 在 Angular 4 中不起作用

    我是 Angular 4 的新手 我正在尝试配置引导程序 我安装了 ng bootstrap https ng bootstrap github io getting started https ng bootstrap github io
  • 为 C++ 配置 Vim

    我想让 vim 成为我的 C 编辑器 我对此的使用经验很少 并需要帮助配置 vim 以使用 C 我需要这样的功能 代码完整 对于 stl 和我的课程 在 cc 和 h 文件之间切换 作为 C 和 Vim 大师 您可能还有更多技巧 也许您可以
  • 从 gcc/clang 获取 libasan 的位置

    当我编译时 fsanitize address GCC Clang 隐式使用 ASAN 动态库 为 ASAN 提供运行时支持 如果您构建的库是由另一个应用程序动态加载的 则需要设置LD PRELOAD包含此动态库 以便它在应用程序启动时运行
  • 为什么我不能在 setter 中放置属性名称而不是“value”关键字?

    当我通过 setter 中分配一个值时value关键字 它有效 但是 为什么当我尝试通过属性名称分配值时它不起作用 该属性应该保存相同的分配值 在下面的例子中 我使用valuesetter 中的关键字 它工作得很好 我得到了预期的输出 pr