我想要实现的目标如下:我在BaseClass中声明了一个属性.如果通过基类'指针访问此属性,则只有getter可用,但如果使用派生类指针,我希望能够获取并设置该属性.所以intellisense甚至不应该显示基本指针的setter.
public class BaseClass
{
public virtual int MyProperty
{
get { return 1; }
set {;}//This would show the setter in Intellisense
}
}
public class DerivedClass : BaseClass
{
int intValue;
public override int MyProperty
{
set { intValue = value;}
}
}
Run Code Online (Sandbox Code Playgroud)
一个现实的例子:
考虑一种情况,你有一个从Person类派生的Parent和Child类.想象一下属性-RestrictionLevel,两者都可以读取它,但只有父级可以设置值.有没有更好的方法来设计这种情况?
我很难在C#中实现一个只在抽象基类中有一个getter的属性,但是我需要在其中一个派生类中引入一个setter.
我的类图概述如下:

我的目标是两个类TextElementStatic和TextElementReferenceSource应该具有包含getter和setter 的Text属性,而类TextElementReferenceTarget应该具有仅具有getter 的Text属性.我在引用所有这些对象时经常使用ITextElement,我需要确保ITextElement接口只有一个getter.此外,基类TextElement实现了许多通用代码,因此所有类都需要从该类继承.
我当前的代码如下所示:
接口:ITextElement
public interface ITextElement
{
string Text { get; }
}
Run Code Online (Sandbox Code Playgroud)
接口:ITextElementUpdatable
public interface ITextElementUpdatable : ITextElement
{
new string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
抽象类:TextElement (这是我的问题所在,解释如下)
public abstract class TextElement : ITextElement
{
// I want to mark this 'abstract', but that causes my problem
public virtual string Text …Run Code Online (Sandbox Code Playgroud)