まあ、それはあなたが使用している言語に依存します。すべてがオブジェクトである純粋なオブジェクト指向言語(Smalltalkなど)では、クラスも例外ではなく、オブジェクトでもあります。クラスが第一級市民と見なされない他の言語では、それらは単なる特別な言語構造またはプリミティブ型です。これからは、リフレクションのサポートと同種のスタイルにより、Smalltalkをターゲット言語として使用します。
class.method名の名前だけでClassメソッドにアクセスするにはどうすればよいですか?(内部作業)。これはobject.methodと同じですか?
クラスはオブジェクトであるため、クラス(メタクラス)のインスタンスになります。したがって、クラスにメッセージを送信することは、クラスの動作を表す役割を持つオブジェクトにメッセージを送信することです。そこにはたくさんの文献があります、あなたはいくつかの紹介のためにこことここで例えば見ることができます。
そして、クラスがオブジェクトと同じであり(OO内のすべてのもののスーパークラスであるオブジェクトクラスに属している)、それをインスタンス化する(オブジェクトを作成する)場合、オブジェクトクラス以外のクラスのインスタンスのインスタンスを作成できますか?
ここであなたをフォローするかどうかはわかりませんが、明確にするためにObject
、すべてのクラスのスーパークラスであるとは限りません。問題は、クラスとメタクラスの間の関係を追跡し始めると、一種の無限ループに到達する可能性があるということです。さまざまな言語がさまざまな方法でこれを実行します。たとえば、VisualWorks Smalltalkでは、Object
のサブクラスですnil
。それnil
はオブジェクトでもあり(すべてがオブジェクトであることを忘れないでください)、実際には「何もない」ことを表しています。ご想像のとおり、nil
はクラス()のインスタンスでありUndefinedObject
、クラスプロトコルの一部も実装しています。結果として、何も継承されないクラス形式を表すために使用できます:)。
最後に、これがあなたの質問に答えるかどうかはわかりませんが、はい、その場で新しいクラスを作成したり、既存のクラスを再形成したりするなど、完全な反射機能で多くのクールなことを行うことができます。このトピックに関して興味深いと思われるドキュメントをいくつかここに残しておきます。