c# - 覆盖非虚拟属性

标签 c# inheritance

我知道在 C# 中我们不能覆盖非虚拟字段和方法,但我有以下情况:

Class Base
{
   public static int a {get;set;}
   public static void b()
   {
       // it uses a
   }
   public static void c()
   {
       // it uses a
   }
   public static string d {get {return a.ToString();}}
}

Class MyClass :Base
{
    //...
}

现在在我的类 MyClass 中,我想覆盖所有 Base class 方法和属性开始使用被覆盖的属性的属性 a我实现了,考虑到我无权更改 Base class

有什么办法可以做到这一点,即使我不得不 re-implement该属性的 getter 方法?

最佳答案

这是一个静态属性,因此以 Base.a 的形式使用。无论您做什么,调用代码仍将解析为 Base 类,然后解析为它的静态属性 a

例如

//old calling code
Base.a = 7; // does not create an instance
Console.WriteLine(Base.a);

class MyClass :Base
{
   public static string a {get; set;}
}

//new calling code
MyClass.a = "some string"; // uses whatever a you defined in MyClass
Console.WriteLine(MyClass.a);

关于c# - 覆盖非虚拟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20052159/

相关文章:

c# - 在 asp.net Web API 中映射数组

java - 在静态父方法中访问子类常量

c++ - 从直接多重继承改为间接多重继承会出现什么问题?

java - Java 中静态抽象方法的替代方案

包含任何类型的模板类对象的 C++ 映射

javascript - 调用终止前调用 AJAX 成功

c# - Graphics.DrawImage 对于更大的图像是否太慢?

c# - 使用 C# 将 DateTime 插入 SQL Server

c# - 无法使用 FFmpeg 解码 H.264 流(附件 B)

javascript - 如何判断两个 JavaScript 实例是否属于同一类类型?