这两个属性实现之间有什么区别?
public override string A
{
get { return "s"; }
set { }
}
public override string A
{
get { return "s"; }
}发布于 2016-06-30 13:47:03
因为A是override,所以基类必须同时具有get和set (否则代码不会编译)。
public class MyBase {
public virtual String A {
get {
return "getBaseA";
}
set {
throw new NotSupportedException("setBaseA");
}
}
}现在有两个不同的派生类:
public class MyDerivedA: MyBase {
public override String A {
get {
return "s";
}
set { // set is overridden, now set does nothing
}
}
}
public class MyDerivedB: MyBase {
public override String A {
get {
return "s";
}
// set is not overridden, same as in the base class
}
}让我们调用这两个set方法:
// Does nothing: overridden MyDerivedA.A.set is called
MyBase test1 = new MyDerivedA();
test1.A = "Sample";
// Will throw NotSupportedException (base MyBase.A.set is called)
MyBase test2 = new MyDerivedB();
test2.A = "Sample";发布于 2016-06-30 13:39:27
第一个方法将重写基类中的A的setter,该方法是不做任何操作的。所以你可以拥有A = "",但它什么也不做。
定义setter的方法是public override TheCompilerGeneratedNameForSetterOfAInBaseClass(string value) { },在第二种情况下,A = ""将编译,但它将调用A的基类setter。
发布于 2016-06-30 13:47:06
这个getter和setter是overriden。在执行x.A =""时,这段代码在这两种情况下都会编译。在第一种情况下,我们重写set属性,这意味着当您试图为对象赋值时,不会发生任何事情。在第二种情况下,它将使用基类实现。
https://stackoverflow.com/questions/38124814
复制相似问题