我有一个C#2.0应用程序,其中基本接口允许对具体类中的值进行只读访问。但是,在具体的类中,我希望对该值具有读/写访问权限。所以,我有一个这样的实现:
public abstract class Base
{
public abstract DateTime StartTime { get; }
}
public class Foo : Base
{
DateTime start_time_;
public override DateTime StartTime
{
get { return start_time_; }
internal set { start_time_ = value; }
}
}
但是,这给了我错误:
Foo.cs(200,22): error CS0546: 'Foo.StartTime.set': cannot override because 'Base.StartTime' does not have an overridable set accessor
我不希望基类具有写访问权限。但是,我确实希望具体类提供读/写访问权限。有没有办法使这项工作?
谢谢, PaulH
不幸的是,Base
无法更改为接口,因为它还包含非抽象功能。我应该想到的东西放在最初的问题描述中。
public abstract class Base
{
public abstract DateTime StartTime { get; }
public void Buzz()
{
// do something interesting...
}
}
我的解决方案是这样做:
public class Foo : Base
{
DateTime start_time_;
public override DateTime StartTime
{
get { return start_time_; }
}
internal void SetStartTime
{
start_time_ = value;
}
}
它并不像我想的那么好,但它确实有用。
答案 0 :(得分:3)
有什么理由不在抽象类上使用接口吗?
public interface Base
{
DateTime StartTime { get; }
}
public class Foo : Base
{
DateTime start_time_;
public DateTime StartTime
{
get { return start_time_; }
internal set { start_time_ = value; }
}
}
答案 1 :(得分:1)
你可以这样做:
public abstract class Base
{
public abstract DateTime StartTime { get; internal set; }
}
public class Foo : Base
{
DateTime start_time_;
public override DateTime StartTime
{
get
{
return start_time_;
}
internal set
{
start_time_ = value;
}
}
}
(可选)使用界面。
答案 2 :(得分:0)
从基类派生时不能这样做,但是在实现接口时可以这样做。
因此,如果您可以使用接口替换基类,那么它将起作用。
答案 3 :(得分:0)
我的解决方案是这样做:
public class Foo : Base
{
DateTime start_time_;
public override DateTime StartTime
{
get { return start_time_; }
}
internal void SetStartTime
{
start_time_ = value;
}
}
它并不像我想的那么好,但它确实有用。