16 .net c# properties
这两个属性实现有什么区别?
public override string A
{
get { return "s"; }
set { }
}
public override string A
{
get { return "s"; }
}
Run Code Online (Sandbox Code Playgroud)
Dmi*_*nko 23
那么,既然A是override比基类必须有两个 get及set(否则代码不会编译)如
public class MyBase {
public virtual String A {
get {
return "getBaseA";
}
set {
throw new NotSupportedException("setBaseA");
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在您有两个不同的派生类:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我们称之为两种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";
Run Code Online (Sandbox Code Playgroud)
第一个将A使用一个什么都不做的方法覆盖基类中的setter .所以你可以拥有,A = ""但它什么都不做.
定义setter时的方法将public override TheCompilerGeneratedNameForSetterOfAInBaseClass(string value) { }在第二种情况下A = ""编译,但它将调用基类setter A.