问题: 创建一个类似于EF模型生成器的工具,您可以在其中输入表/列/关系,它将生成模型类。它是Visual Studio的插件,在VSIX中使用 DTE (开发工具环境)运行。
我成功创建了具有属性的抽象类。现在我想在同一个文件中创建其他类,它将继承自抽象类,并且还将标记为partial
。我不知道如何将该类标记为部分,IntelliSence
没有提供任何合适的方法/属性,并且在Google / SO / MSDN上搜索没有给我任何相关结果。
获得这个想法的一些代码:
ProjectItem File = CreateOrFindClassFile(/*params*/); //Creating project file
if (File != null)
{
var NS = File.FileCodeModel.AddNamespace("ABC"); //Added namespace ABC
string ChildClassName = "Xyz";
string BaseClassName = "XyzBase";
//Generate base abstract class
var BaseClass = NS.AddClass(BaseClassName);
if (BaseClass != null)
{
BaseClass.Access = vsCMAccess.vsCMAccessPublic;
BaseClass.IsAbstract = true;
//some methods to add variables/methods/properties
}
//Generate partial child class
var ChildClass = lNamespace.AddClass(ChildClassName);
if (ChildClass != null)
{
ChildClass.Access = vsCMAccess.vsCMAccessPublic;
ChildClass.AddBase(lBaseClassName);
//TODO: add some code to mark as partial
}
}
问题:是否有OOP方式(通过DTE类树)将类标记为partial
?
或者我被迫把这个类写成一个字符串:
NS.GetStartPoint(..)
.CreateEditPoint()
.Insert("public partial class Xyz : XyzBase\n{\n}\n");
注意:它可以工作,但我失去了对类的控制和OOP方法。
编辑1:刚刚在EnvDTE partial class keyword
上找到了一些参考资料答案 0 :(得分:1)
尝试将ChildClass
转换为EnvDTE80.CodeClass2
,然后使用以下属性:
((EnvDTE80.CodeClass2)ChildClass).ClassKind = EnvDTE80.vsCMClassKind.vsCMClassKindPartialClass;
请注意,此属性可能隐藏在对象浏览器或智能感知中。