クラスの継承関係を調べる
指定したクラスと互換できるか調べる
指定したクラスがこのクラスと一致する、もしくはこのクラスの派生クラスか調べるには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)}");
}