当前位置:  开发笔记 > 编程语言 > 正文

如何强制派生类实现静态属性或字段?

如何解决《如何强制派生类实现静态属性或字段?》经验,为你挑选了1个好方法。

这是我的抽象类:

abstract class Enemy
{
    protected static abstract float HEALTH
    {
        get;
    }

    float health;

    void someMethod()
    {
        health = HEALTH;
    }
}

这是我的派生类:

abstract class BadGuy : Enemy
{
    protected override static float HEALTH
    {
        get { return 1; }
    }
}

Compiler先生说我不能让成员HEALTH在Enemy课程中保持静态和抽象.

我的目标是强制每个子类具有可以从父类访问的静态或常量字段.

这有解决方案吗?如果没有,最优雅的解决方法是什么?使财产非静态?



1> Yuval Itzcha..:

static和继承不能一起工作.你可以做的是创建一个可以在派生类中重写的虚拟属性.如果您愿意,您可以在里面提供基本实现Enemy,或者abstract如果您不想要保留它:

public abstract class Enemy
{
    protected abstract float Health { get; }
}

public class BadGuy : Enemy
{
    private const int BadGuyHealth = 1;
    protected override float Health
    {
        get { return BadGuyHealth; }
    }
}

public class EvenWorseGuy : BadGuy
{
    private const int WorseGuyHealth = 2;
    protected override float Health
    {
        get { return WorseGuyHealth; }
    }
}

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有