使用子类引用中的引用,由于它们是虚拟的,因此如何表现该方法的可访问性?假设这个例子:public class Asset { public string name; public virtual decimal Liability {get {return 0;} }}public class House : Asset { public decimal Mortgage; public override decimal Liability {get {return Mortgage;} }}House mansion = new House {name = "SomeName", Mortgage = 100000};Asset a = mansion;print (mansion.Liability); // 100000print (a.Liability); // 100000 (not 0!)我认为a.Liability将显示0,因为它是类型Asset的引用,并考虑到上一转换的可访问性。 最佳答案 创建子类House后,其中Liability以多态方式被覆盖,即使从a的角度访问引用Asset也会归类到该子类,因为Liability被声明为在基类中,这就是您通常想要的行为(如果要使用多态性)。想象一个virtual,其中每个实例都是List<Asset>的不同子类型。您不想关心子类型,但希望“仅访问” Asset属性,并始终根据具体实例获得正确的值。那就是多态。如果您将使用Liability而不是在new中覆盖,则将得到House.Liability作为结果。因为0会破坏继承链。因此,从new的引用中查看,您只会看到Asset(因为子类中的Asset.Liability会隐藏“超出”的所有内容)。但是,如果您从new的引用中查找,就会看到House。那不再是多态了。也许Polymorphism会为您澄清这一点;-)关于c# - 使用虚拟/覆盖方法可从类型转换引用访问对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35537482/
10-11 00:38