我的C#项目中有一个部分类,即来自Entity Framework的自动生成的代码。现在我想修改或添加更多功能,属性或方法到该类。我在项目的EntityFrameworkModel.tt\Author.cs
选项卡下有自动生成的类代码,而其他相关的类在另一个文件夹中,即同一项目中的GraphData
。
我也知道部分类的名称应该相同,而文件名也可以不同或相同。我这样做但是当我将Author.cs
的对象定义为:
protected override EvoObject ConvertCPV(Author _author)
{
if (_author.???)
{
//...
}
}
我无法访问GraphData\Author.cs
中定义的方法(示例代码中的问号),而EntityFrameworkModel.tt\Author.cs
中定义的属性只能访问。
我将Solution Explorer
图片附加为:
如何从两个类中访问属性和方法?
答案 0 :(得分:2)
我在项目中也有类似的设置。
为了保持整洁,我还有一些文件夹,我放置了某些部分类,你只需要确保命名空间与自动生成的类相同。
当您向文件夹添加新类时,命名空间将自动包含文件夹的名称 - 您只需从命名空间中删除文件夹名称 - 您应该在此方案中拥有项目名称。
如果命名空间不同,则部分类不属于同一个类。这就是您无法访问新函数/属性的原因。
此外,即使您的文件名和类名可能不同,最好保持它们相同 - 如果文件具有相同的名称,则更容易找到类。
答案 1 :(得分:0)
部分的整个想法是允许代码生成器不关心你的代码。在修改生成的类时,下一次重新生成会消除更改。
我做了同样的事情,但当我为Author.cs定义对象时:
啊,不,你没有,因为那时你声称你的定义是:
受保护的覆盖EvoObject ConvertCPV(作者_author)
哪个不是定义对象。
我无法访问GraphData \ Author.cs
中定义的方法
因为命名空间?检查命名空间 - 当它们属于与EntityFrameworkModel.tt相同的命名空间时,将它们放在子文件夹中是不好的
而EntityFrameworkModel.tt \ Author.cs中定义的属性仅为 访问。
部分类不允许对另一部分进行更改 - 暂时不考虑替代语法。
答案 2 :(得分:0)
查看https://msdn.microsoft.com/en-us/library/wa80x488.aspx
它说"The partial keyword indicates that other parts of the class, struct, or interface can be defined in the namespace."
它没有明确说明这一点,但这意味着必须在相同的命名空间中声明类的部分定义。项目中的哪些文件包含类或它们所在的文件夹并不重要。
using System;
namespace DemoConsoleApp
{
class Program
{
static void Main(string[] args)
{
SameNamespace.PartialClass.MethodOne();
SameNamespace.PartialClass.MethodTwo();
DifferentNamespace.PartialClass.MethodThree();
}
}
}
namespace SameNamespace
{
public partial class PartialClass
{
public static void MethodOne()
{
Console.WriteLine("Method One.");
}
}
public partial class PartialClass
{
public static void MethodTwo()
{
Console.WriteLine("Method Two.");
}
}
}
namespace DifferentNamespace
{
public partial class PartialClass
{
public static void MethodThree()
{
Console.WriteLine("Method Three.");
}
}
}