Getter 没有 body,Setter 有
Getter without body, Setter with
我有一个 属性 目前是自动的。
public string MyProperty { get; set; }
但是,我现在需要它在每次更改时执行一些操作,所以我想向 setter 添加逻辑。所以我想做类似的事情:
public string MyProperty {
get;
set { PerformSomeAction(); }
}
然而,这并没有建立... MyProperty.get' must declare a body because it is not marked abstract, extern, or partial
我不能只使用 getter return MyProperty
因为它会导致无限循环。
有没有办法做到这一点,或者我必须声明一个私有变量来引用?我宁愿不这样做,因为 MyProperty
在这个 class 和
之外的代码中都被使用
您需要使用 属性 支持字段:
private string mMyProperty;
public string MyProperty
{
get { return mMyProperty; }
set
{
mMyProperty = value;
PerformSomeAction();
}
}
你不能在没有另一个的情况下实现一个,因为当使用一个时,它指的是一个(隐藏的)支持字段,它在自动生成的情况下自动生成 属性。但是,当您实现一个时,您必须以两种方式设置此支持字段。
自动方式只是一个捷径:
private string _property;
public string MyProperty
{
get { return _property; }
set { _property = value; }
}
因此,如果您在其中一种方法中省略了隐藏字段(这实际上是 getter 和 setter),那么该方法应该如何知道如何 store/get 值?
如果您在 setter 中执行某些操作,则必须显式声明该变量。例如
private string _myProperty;
public string MyProperty {
get { return _myProperty; };
set
{
_myProperty = value;
PerformSomeAction();
}
}
或者 - 在 setter 中,你可以将值传递给函数并在那里做你想做的事......假设你想 change/check 函数中的值 PerformSomeAction()
您需要为 getter 和 setter 提供正文,或者两者都不提供。
因此,如果您定义其中任何一个,它就不再是自动 属性。
所以你必须做:
两者都
public string MyProperty {
get;
set;
}// Automatic property, no implementation
或
public string MyProperty
{
get { return mMyProperty; }
set
{
mMyProperty = value;
PerformSomeAction();
}
}
这与问题 C# getter and setter shorthand 相似。
当您手动指定 setter 时,它不会使用 getter 的自动 属性 机制,这就是为什么错误消息就像丢失了一样。当您指定 setter.
时,您需要编写自己的 getter
我有一个 属性 目前是自动的。
public string MyProperty { get; set; }
但是,我现在需要它在每次更改时执行一些操作,所以我想向 setter 添加逻辑。所以我想做类似的事情:
public string MyProperty {
get;
set { PerformSomeAction(); }
}
然而,这并没有建立... MyProperty.get' must declare a body because it is not marked abstract, extern, or partial
我不能只使用 getter return MyProperty
因为它会导致无限循环。
有没有办法做到这一点,或者我必须声明一个私有变量来引用?我宁愿不这样做,因为 MyProperty
在这个 class 和
您需要使用 属性 支持字段:
private string mMyProperty;
public string MyProperty
{
get { return mMyProperty; }
set
{
mMyProperty = value;
PerformSomeAction();
}
}
你不能在没有另一个的情况下实现一个,因为当使用一个时,它指的是一个(隐藏的)支持字段,它在自动生成的情况下自动生成 属性。但是,当您实现一个时,您必须以两种方式设置此支持字段。
自动方式只是一个捷径:
private string _property;
public string MyProperty
{
get { return _property; }
set { _property = value; }
}
因此,如果您在其中一种方法中省略了隐藏字段(这实际上是 getter 和 setter),那么该方法应该如何知道如何 store/get 值?
如果您在 setter 中执行某些操作,则必须显式声明该变量。例如
private string _myProperty;
public string MyProperty {
get { return _myProperty; };
set
{
_myProperty = value;
PerformSomeAction();
}
}
或者 - 在 setter 中,你可以将值传递给函数并在那里做你想做的事......假设你想 change/check 函数中的值 PerformSomeAction()
您需要为 getter 和 setter 提供正文,或者两者都不提供。
因此,如果您定义其中任何一个,它就不再是自动 属性。
所以你必须做:
两者都
public string MyProperty {
get;
set;
}// Automatic property, no implementation
或
public string MyProperty
{
get { return mMyProperty; }
set
{
mMyProperty = value;
PerformSomeAction();
}
}
这与问题 C# getter and setter shorthand 相似。
当您手动指定 setter 时,它不会使用 getter 的自动 属性 机制,这就是为什么错误消息就像丢失了一样。当您指定 setter.
时,您需要编写自己的 getter