编程语言
首页 > 编程语言> > C#-为仅定义读取的接口实现读/写字段

C#-为仅定义读取的接口实现读/写字段

作者:互联网

我有一个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

我不希望基类具有写权限.但是,我确实希望具体的类提供读/写访问权限.有没有办法使这项工作?

谢谢,
保罗·H

不幸的是,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;
    }
}

它不如我想要的好,但是可以.

解决方法:

有什么理由不使用抽象类上的接口?

    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; }
        }
    }

标签:compiler-errors,field,c-2-0,c
来源: https://codeday.me/bug/20191105/1995873.html