Questions tagged «abstract-class»

抽象类是无法实例化的类。它们存在的目的是为几种具体的类提供通用的功能和接口规范。

11
为什么纯虚函数由0初始化?
我们总是将纯虚函数声明为: virtual void fun () = 0 ; 即,始终将其分配为0。 我了解的是,这是将此函数的vtable条目初始化为NULL,此处的任何其他值都会导致编译时错误。这种理解正确与否?

6
测试抽象类
如何使用PHPUnit测试抽象类的具体方法? 我希望我必须在测试中创建某种对象。但是,我不知道这是否是最佳实践,或者PHPUnit是否允许这样做。


19
Visual Studio:如何显示从基类继承的所有类?
在Visual Studio中,如何显示所有从基类继承的类? 例如,在ASP.NET MVC中,有几种“ ActionResult ”类型-它们都继承自/实现基类ActionResult。 除非您只是“知道” View并且Json是有效ActionResult类型,否则看起来无法轻松找到此信息。 请证明我错了。 对象浏览器中是否有某些东西可以很容易地找出来? 我什至会提出有关Visual Studio外部工具的建议,以发现有关各种类的信息。例如:Resharper中有什么可以帮助我的吗?

3
C#:抽象类需要实现接口吗?
我在C#中的测试代码: namespace DSnA { public abstract class Test : IComparable { } } 导致以下编译器错误: error CS0535: 'DSnA.Test' does not implement interface member 'System.IComparable.CompareTo(object)' 由于该类Test是一个抽象类,为什么编译器需要它来实现接口?这项要求不是仅对具体课程是强制性的吗?

11
Swift语言中的抽象函数
我想用快速语言创建一个抽象函数。可能吗? class BaseClass { func abstractFunction() { // How do I force this function to be overridden? } } class SubClass : BaseClass { override func abstractFunction() { // Override } }

9
PHP抽象属性
有没有办法在PHP中定义抽象类属性? abstract class Foo_Abstract { abstract public $tablename; } class Foo extends Foo_Abstract { //Foo must 'implement' $property public $tablename = 'users'; }
126 php  oop  abstract-class 

7
为什么实现接口的抽象类可能会错过接口方法之一的声明/实现?
当您使用抽象类实现接口时,Java中发生了一件奇怪的事情:某些接口的方法可能会完全丢失(即既没有抽象声明也没有实际的实现),但是编译器不会抱怨。 例如,给定接口: public interface IAnything { void m1(); void m2(); void m3(); } 以下抽象类在没有警告或错误的情况下得到了愉快的编译: public abstract class AbstractThing implements IAnything { public void m1() {} public void m3() {} } 你能解释为什么吗?

17
如何在Ruby中实现一个抽象类?
我知道红宝石中没有抽象类的概念。但是,如果根本需要实施,该怎么做?我尝试过类似... class A def self.new raise 'Doh! You are trying to write Java in Ruby!' end end class B < A ... ... end 但是,当我尝试实例化B时,它将在内部进行调用A.new,这将引发异常。 同样,模块不能被实例化,但是它们也不能被继承。将新方法设为私有也将不起作用。有指针吗?


10
Pimpl成语vs Pure虚拟类接口
我想知道什么会使程序员选择Pimpl习惯用语或纯虚拟类和继承。 我知道pimpl习惯用法为每个公共方法和对象创建开销提供了一个显式的额外间接。 另一方面,Pure虚拟类带有用于继承实现的隐式indirect(vtable),据我了解,没有对象创建开销。 编辑:但是,如果您从外部创建对象,则需要工厂 是什么使纯虚拟类比pimpl惯用语更不受欢迎?

3
如何在python抽象类中创建抽象属性
在以下代码中,我创建了一个基本抽象类Base。我希望所有从其继承的类都Base提供该name属性,因此我将该属性设置为@abstractmethod。 然后,我创建了一个Base名为的子类,该子类Base_1旨在提供一些功能,但仍保持抽象。中没有name属性Base_1,但是python实例化了该类的对象而没有错误。一个人如何创建抽象属性? from abc import ABCMeta, abstractmethod class Base(object): __metaclass__ = ABCMeta def __init__(self, strDirConfig): self.strDirConfig = strDirConfig @abstractmethod def _doStuff(self, signals): pass @property @abstractmethod def name(self): #this property will be supplied by the inheriting classes #individually pass class Base_1(Base): __metaclass__ = ABCMeta # this class does not provide the …


4
`staticmethod`和`abc.abstractmethod`:会融合吗?
在我的Python应用程序中,我想创建一个既是staticmethod和又是的方法abc.abstractmethod。我该怎么做呢? 我尝试同时应用两个装饰器,但不起作用。如果我这样做: import abc class C(object): __metaclass__ = abc.ABCMeta @abc.abstractmethod @staticmethod def my_function(): pass 我遇到异常*,如果执行此操作: class C(object): __metaclass__ = abc.ABCMeta @staticmethod @abc.abstractmethod def my_function(): pass 没有强制执行抽象方法。 如何制作抽象的静态方法? *例外: File "c:\Python26\Lib\abc.py", line 29, in abstractmethod funcobj.__isabstractmethod__ = True AttributeError: 'staticmethod' object has no attribute '__isabstractmethod__'

6
抽象类的命名约定
我清楚地记得,曾经有一次,Microsoft提出的指导方针是将“ Base”后缀添加到抽象类中,以消除它是抽象的事实。因此,我们有类,如System.Web.Hosting.VirtualFileBase,System.Configuration.ConfigurationValidatorBase,System.Windows.Forms.ButtonBase,,当然,System.Collections.CollectionBase。 但是我注意到,最近,框架中的许多抽象类似乎都没有遵循这个约定。例如,以下类都是抽象的,但不遵循此约定: System.DirectoryServices.ActiveDirectory.DirectoryServer System.Configuration.ConfigurationElement System.Drawing.Brush System.Windows.Forms.CommonDialog 这就是我可以在几秒钟内完成的工作。因此,我去查找官方文档中要说的内容,以确保我没有发疯。我在《开发类库的设计指南》上的MSDN上找到了类,结构和接口的名称。奇怪的是,我找不到提及在抽象类名称的末尾添加“ Base”的准则。并且指南不再适用于框架的1.1版。 那么,我会失去它吗?该指南曾经存在吗?只是一言不发就被遗弃了吗?在过去的两年中,我是否一直独自创建长类名称? 有人在这里扔我一根骨头。 更新 我不疯。该准则存在。Krzysztof Cwalina于2005年加入了这项计划。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.