タグ付けされた質問 「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
インターフェースを実装する抽象クラスが、インターフェースのメソッドの1つの宣言/実装を見逃す可能性があるのはなぜですか?
抽象クラスを使用してインターフェースを実装すると、Javaで奇妙なことが起こります。インターフェースのメソッドの一部が完全に欠落している可能性があります(つまり、抽象宣言も実際の実装も存在しない)が、コンパイラーは文句を言いません。 たとえば、次のインターフェイスがあるとします。 public interface IAnything { void m1(); void m2(); void m3(); } 次の抽象クラスは、警告やエラーなしで陽気にコンパイルされます。 public abstract class AbstractThing implements IAnything { public void m1() {} public void m3() {} } 理由を説明できますか?

17
Rubyで抽象クラスを実装する方法は?
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イディオムとPure仮想クラスインターフェイス
プログラマーがPimplイディオムまたは純粋な仮想クラスと継承のどちらを選択するのかを考えていました。 Pimplイディオムには、各パブリックメソッドとオブジェクト作成のオーバーヘッドごとに1つの明示的な間接指定が付属していることを理解しています。 一方、純粋仮想クラスには、継承する実装のための暗黙の間接指定(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では利用できなくなりました。 それで、私はそれを失っていますか?このガイドラインは存在しましたか?それは何の言葉もなく捨てられたのですか?過去2年間、自分で長いクラス名を1つも作成していませんか。 誰かがここで骨を投げます。 更新 私は狂っていません。ガイドラインは存在した。Krzysztof Cwalinaは2005年にそれについて不満を述べています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.