我有一种情况需要覆盖属性的getter.
假设我们有:
public class MyBaseClass {
private var _name: String
public internal(set) var name: String {
get {
return self._name
}
set {
self._name = newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
我猜,没什么特别的.
现在,如果我尝试覆盖派生类中的getter:
public class MyDerivedClass: MyBaseClass {
public var name: String {
get {
return "Derived - \(super.name)"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到编译错误:无法使用只读属性"name"覆盖mutable属性.
如果我尝试添加setter并覆盖它:
public class MyDerivedClass: MyBaseClass {
public internal(set) var name: String {
get {
return "Derived - \(super.name)"
}
set {
super.name = newValue
}
}
} …Run Code Online (Sandbox Code Playgroud) 我偶然发现了一个问题,我无法弄清楚如何解决它.
假设我们有一个基类(可能来自FrameworkA),其属性名为subject:
public class MyClass {
public var subject: String
}
Run Code Online (Sandbox Code Playgroud)
我们有一个协议(可能来自FrameworkB),另一个属性但具有相同的名称:
public protocol MyProtocol {
var subject: String { get }
}
Run Code Online (Sandbox Code Playgroud)
这两个属性代表完全不同的东西.
如何创建一个继承MyClass和实现的类MyProtocol?我该如何使用这些属性?
public class SecondClass: MyClass, MyProtocol {
var MyProcotol.name: String { // <==== Obviously not allowed
return "something"
}
var MyClass.name: String { // <==== Obviously not allowed
return "something else"
}
}
Run Code Online (Sandbox Code Playgroud)
我认为C#允许这样的声明,但我不是100%肯定...