メインコンテンツまでスキップ

クラスの継承関係を調べる

指定したクラスと互換できるか調べる

指定したクラスがこのクラスと一致する、もしくはこのクラスの派生クラスか調べるにはIClassオブジェクトのIsClassOfメソッドを用います。

public void IsClassOf(ICommandContext c, ICommandParams p)
{
// メタモデルを取得します
IMetamodels metamodels = c.App.Workspace.CurrentProject.Profile.Metamodels;

// "EntityBase"のクラスを取得します
IClass entityClass = metamodels.GetClass("EntityBase");

// "Actor"のクラスを取得します
IClass actorClass = metamodels.GetClass("Actor");

// "UseCase"のクラスを取得します
IClass usecaseClass = metamodels.GetClass("UseCase");

// "RootModelBase"のクラスを取得します
IClass rootModelBase = metamodels.GetClass("RootModelBase");

// 一致するクラスの場合、互換すると判定されます
c.App.Output.WriteLine("sample", $"EntityBase は EntityBase と互換するか: {entityClass.IsClassOf(entityClass)}");

// 派生クラスの場合、互換すると判定されます
c.App.Output.WriteLine("sample", $"Actor は EntityBase と互換するか: {actorClass.IsClassOf(entityClass)}");

// 上記のどちらでもないクラスの場合、互換しないと判定されます
c.App.Output.WriteLine("sample", $"Actor は UseCase と互換するか: {usecaseClass.IsClassOf(actorClass)}");

// 派生クラスの派生クラスを指定した場合、互換すると判定されます
c.App.Output.WriteLine("sample", $"UseCase は RootModelBase と互換するか: {usecaseClass.IsClassOf(rootModelBase)}");
}

あるクラスの継承元であるか調べる

指定したクラスがこのクラスの継承元のクラスか調べるにはIClassオブジェクトのIsSuperClassメソッドを用います。

public void IsSuperClass(ICommandContext c, ICommandParams p)
{
// メタモデルを取得します
IMetamodels metamodels = c.App.Workspace.CurrentProject.Profile.Metamodels;

// "EntityBase"のクラスを取得します
IClass entityClass = metamodels.GetClass("EntityBase");

// "Actor"のクラスを取得します
IClass actorClass = metamodels.GetClass("Actor");

// "UseCase"のクラスを取得します
IClass usecaseClass = metamodels.GetClass("UseCase");

// "RootModelBase"のクラスを取得します
IClass rootModelBase = metamodels.GetClass("RootModelBase");

// 一致するクラスの場合、継承元のクラスではないと判定されます
c.App.Output.WriteLine("sample", $"EntityBase は EntityBase の継承元のクラスか: {entityClass.IsSuperClass(entityClass)}");

// 継承元のクラスと判定されます
c.App.Output.WriteLine("sample", $"EntityBase は Actor の継承元のクラスか: {entityClass.IsSuperClass(actorClass)}");
c.App.Output.WriteLine("sample", $"RootModelBase は UseCase の継承元のクラスか: {rootModelBase.IsSuperClass(usecaseClass)}");

// 上記のどちらでもないクラスの場合、継承元のクラスではないと判定されます
c.App.Output.WriteLine("sample", $"Actor は UseCase の継承元のクラスか: {actorClass.IsSuperClass(usecaseClass)}");
}