我有一个抽象类:
abstract class ClassBase
{
public abstract string Test { get; }
}
Run Code Online (Sandbox Code Playgroud)
我想得到它,顺便添加一个set accesor
class ClassDerive : ClassBase
{
string _s;
public override string Test
{
get { return _s; }
set { _s = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
我不能这样做因为我可能不会覆盖set
class ClassDerive2 : ClassBase
{
string _s;
public string Test
{
override get { return _s; }
set { _s = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
语法错误
class ClassDerive3 : ClassBase
{
string _s;
public override string ClassBase.Test
{
get { return _s; }
}
public string Test
{
set { _s = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
语法错误
任何的想法 ???
谢谢
你不能这样做正是你想做的事,但这里是一个解决办法:
abstract class ClassBase
{
public abstract String Test { get; }
}
class ClassDerive : ClassBase
{
string _s;
public override string Test
{
get { return _s; }
}
public void SetTest(String test)
{
this._s = test;
}
}
Run Code Online (Sandbox Code Playgroud)
这Test
只能ClassDerived
通过公共SetTest
方法设置.我知道这不像使用属性的setter那么干净,但是它的性能和它一样好.
如果首先在类型中定义了只读属性,则以后无法将其更改为派生类中的读/写属性。这就是 .NET 的工作原理,并且无法更改。
另一方面,如果您定义具有只读属性的接口,则稍后可以在具有可写属性的类中实现该接口。
如果您想分享您想要实现的目标,也许我们可以提出一个可行且可以编译的设计:)