如何在较高的类中使用覆盖的属性值? - c#

我正在使用IoC在继承的类中定义某些行为。我有财产

protected virtual bool UsesThing { get { return true; } }

在我的顶级班上。

在我的继承班上

protected override bool UsesThing { get { return false; } } 

我在顶层类中使用该属性,并且在使用顶层值。有没有办法使它使用继承的值?我认为这就是虚拟应该做的。

代码示例:

using System;

public class Program
{
    public static void Main()
    {
        B b = new B();
        b.PrintThing();
    //I want this to print the value for B
    }

    public class A
    {
        protected virtual bool Enabled
        {
            get
            {
                return true;
            }
        }

        public void PrintThing()
        {
            Console.WriteLine(this.Enabled.ToString());
        }
    }

    public class B : A
    {
        protected override bool Enabled
        {
            get
            {
                return false;
            }
        }
    }
}

Here's a Dot Net Fiddle demonstrating my problem

参考方案

您可以执行以下操作:

https://dotnetfiddle.net/SOiLni

A本身对B的实现一无所知,因此您必须实例化B的对象才能访问其Boverride属性。

小提琴的略微修改版本:

public class Program
{
    public static void Main()
    {
        A a = new A();
        a.PrintThing();

        A newA = new B();
        newA.PrintThing();
    }

    public class A
    {
        protected virtual bool Enabled
        {
            get
            {
                return true;
            }
        }

        public void PrintThing()
        {
            Console.WriteLine(this.Enabled.ToString());
        }
    }

    public class B : A
    {
        protected override bool Enabled
        {
            get
            {
                return false;
            }
        }
    }
}

方法链PHP OOP - php

通常,在许多框架中,您可以找到使用查询生成器创建查询的示例。通常您会看到:$query->select('field'); $query->from('entity'); 但是,在某些框架中,您也可以像这样$object->select('field') ->from(�…

OOP:upcast与直接实例化 - java

我正在准备加入SCJP,看起来我不了解类强制转换原则。class Dog extends Animal 创建Dog()实例的第一种方法-制作Animal实例并将其投放到Dog(upcast):Animal a = new Dog(); Dog d1 = (Dog)a; VS创建Dog()实例的第二种方法-直接进行创建:Dog d2 = new Dog(); …

LeetCode题解371.sum-of-two-integers

题目地址 https://leetcode.com/problems/sum-of-two-integers/description/ 题目描述 Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Example 1: …

PHP OOP:为域实体提供“身份” - php

这里有点抽象的问题。我正在尝试使用“域模型”模式,并用依赖项来限制其他麻烦-我需要一些有关生成用于Identity Map的Identity的建议。在我见过的有关Data Mapper模式的大多数示例中(包括本书中概述的一个示例:http://apress.com/book/view/9781590599099),用户似乎使用setter来手动设置给定Dom…

调用glDrawArrays之后的GL_OUT_OF_MEMORY。为什么? - java

我的情况似乎很奇怪。我将尝试提供足够的详细信息,以便比我聪明的人可以对此进行解释。基本上这里是设置:OS: Android 2.2 Froyo Device: SGS Vibrant Application: OpenGL-ES 1.1 问题就在这里:我可以成功渲染一个相当复杂的场景,并且它可以连续运行数小时而不会泄漏任何内存。 Dalvikvm每3-5分钟…