相关疑难解决方法(0)

使派生类中的只读属性可写

我想要实现的目标如下:我在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#

6
推荐指数
3
解决办法
3862
查看次数

为某些(但不是全部)继承的类引入setter

我很难在C#中实现一个只在抽象基类中有一个getter的属性,但是我需要在其中一个派生类中引入一个setter.


更新:有关此问题的一般示例的简短说明,请参阅此问题.选定的答案解释了为什么目前在C#中无法做到这一点,但是,在我看来还没有提供令人满意的解决方案.


我的类图概述如下:

类图

我的目标是两个类TextElementStaticTextElementReferenceSource应该具有包含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)

.net c# inheritance overriding properties

6
推荐指数
1
解决办法
641
查看次数

标签 统计

c# ×2

.net ×1

inheritance ×1

overriding ×1

properties ×1