C# 使用访问器重写属性

C# 使用访问器重写属性,c#,.net,properties,overriding,C#,.net,Properties,Overriding,我试图将专用集访问器添加到重写的属性,但遇到编译时错误: 没有可重写的集访问器 我会向接口和抽象基类添加一个set访问器,但我希望访问器是私有的,在设置其访问级别时,不能将其添加到接口或抽象属性 下面是我的意思的一个例子: public interface IMyInterface { int MyProperty { get; } } public abstract class MyBaseClass : IMyInterface { publ

我试图将
专用集
访问器添加到重写的属性,但遇到编译时错误:

没有可重写的集访问器

我会向接口和抽象基类添加一个
set
访问器,但我希望访问器是私有的,在设置其访问级别时,不能将其添加到接口或抽象属性

下面是我的意思的一个例子:

public interface IMyInterface
{
    int MyProperty
    {
        get;
    }
}

public abstract class MyBaseClass : IMyInterface
{
    public abstract int MyProperty
    {
        get;
    }
}

public class MyClass : MyBaseClass
{
    public override int MyProperty
    {
        get
        {
            return 0;
        }
        private set // does not have an overridable set accessor
        {
        }
    }
}
有办法解决这个问题吗?我肯定我这里遗漏了一些简单的东西。

没有。 无法更改继承类中方法或属性的访问级别,也无法添加访问器

这是我唯一能想到的解决办法

public class MyClass : MyBaseClass
{
    private int myField;

    public override int MyProperty
    {
        get { return myField; }          
    }

    private int MyPropertySetter
    {
        set { myField = value; }
    }
}

嗯,您不能修改继承链中的访问器。所以更好的选择是在基类中添加一个
受保护的集访问器。这将允许您重写派生类中的实现

我的意思是这样的

public interface IMyInterface
{
    int MyProperty
    {
        get;
    }
}

public abstract class MyBaseClass : IMyInterface
{
    public abstract int MyProperty
    {
        get;
        protected set;<--add set accessor here
    }
}

public class MyClass : MyBaseClass
{
    public override int MyProperty
    {
        get
        {
            return 0;
        }
        protected set //this works
        {
        }
    }
}
公共接口IMyInterface
{
int MyProperty
{
得到;
}
}
公共抽象类MyBaseClass:IMyInterface
{
公共抽象属性
{
得到;

受保护集;我只想添加一个私有字段以在get中返回。您可以在基类中添加一个
受保护的
集访问器
,并覆盖它。私有字段不是possible@SriramSakthivel很明显,这是个好主意。它奏效了:)如果你愿意,就把它作为答案like@rhughes作为答复补充