可能重复:
Can I create an automatic property (no private member) with get and set code?
Access automatic property - c#
我使用了明确的getter / setter,例如
private bool myField;
public bool MyField
{ get { return myField; }
set { myField = value; }
}
现在,使用C#.net 4.0,您可以缩写,例如
public bool MyField
{ get; set; }
现在,如果我只想覆盖SET部分,我应该引用的INTERNAL引用是什么......在第一个示例中,我知道我明确指的是“myField”的私有,但是第二个版本,我在引用什么?编译器是否只抛出一个隐含的“_”,如_MyField作为元素的私有端?
答案 0 :(得分:2)
class Parent
{
public virtual bool MyField { get; set; }
}
class Child : Parent
{
public override bool MyField
{
//ommitting get portion
set
{
//other custom code goes here
base.MyField = value;
}
}
}
这里的类继承自具有属性的类,只覆盖setter。或者,您可以覆盖getter,只需将其保留为返回base.MyField即可更改功能。
修改强> 提出的问题是,在执行此操作时,遗留的一半(我的示例中的get)将不存在于子类中,使得属性仅读/写。事实并非如此,遗漏的一半只是从其父级继承其功能。请参阅我的示例中的以下内容以进行演示。
Child c = new Child();
c.MyField = true;
if (c.MyField)
{
Console.WriteLine("hi");
}
(这确实会打印“hi”,没有错误编译或运行时。)
答案 1 :(得分:1)
无论编译器在这种情况下做了什么,都是一个实现细节,将来可能会发生变化而不另行通知!
因此,我强烈建议不要让你的代码依赖于这样的实现细节,只使用第一个选项(覆盖两个访问器并使字段显式地支持属性)在这种情况下......
答案 2 :(得分:0)
您可以使用MyField
以相同的方式访问该媒体资源。但是,如果您不希望类外部的代码能够设置属性,则可以使用:
public bool MyField { get; private set; }