修改/添加到 C# 部分 类
Modifying / Adding to C# Partial Classes
我的 C# 项目中有部分 class,即从 Entity Framework 自动生成的代码。现在我想修改或添加一些功能、属性或方法到 class。我在项目的 EntityFrameworkModel.tt\Author.cs
选项卡下有自动生成的 class 代码,而其他相关的 class 代码在另一个文件夹中,即同一项目中的 GraphData
。
我也知道部分 classes 的名称应该相同,而文件名可能不同或相同。我做了同样的事情,但是当我将 Author.cs
的对象定义为:
protected override EvoObject ConvertCPV(Author _author)
{
if (_author.???)
{
//...
}
}
我无法访问 GraphData\Author.cs
中定义的方法(示例代码中的问号),而 EntityFrameworkModel.tt\Author.cs
中定义的属性只能访问。
我在这里附加了 Solution Explorer
图片:
如何从两个 classes 访问属性和方法?
- 在 EntityFrameworkModel.tt 之外创建您自己的 class - 将其命名为 Author.cs,使 class 部分。
partial 的整个想法是让代码生成器不关心你的代码。你修改了一个生成的 class,下一次重新生成会杀死更改。
I did same but when I defined the object for Author.cs as:
啊,不,你没有,因为你声称你的定义是:
protected override EvoObject ConvertCPV(Author _author)
未定义对象。
I can't access the methods defined in GraphData\Author.cs
因为命名空间?检查命名空间 - 当它们属于与 EntityFrameworkModel.tt
相同的命名空间时,将它们放在子文件夹中是不好的
whereas the properties defined in EntityFrameworkModel.tt\Author.cs are only
accessible.
部分 classes 不允许更改另一个部分 - 暂时不允许,考虑替换语法。
我在一个项目中也有类似的设置。
为了保持整洁,我还有一些文件夹用于放置某些部分 classes,您只需要确保命名空间与自动生成的 class.
相同
当您向文件夹添加新 class 时,命名空间将自动包含文件夹的名称 - 您可以从命名空间中删除文件夹名称 - 在这种情况下您应该只有项目名称.
如果命名空间不同,则部分 class 不属于同一 class。 这就是您无法访问的原因新 functions/Properties.
此外,即使您的文件名和 class 名称可以不同,但最好保持相同 - 如果文件具有相同的 class 将更容易找到名字.
查看 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."
它没有明确说明这一点,但这意味着 class 的部分定义必须在 same 命名空间中声明.项目中的哪些文件包含 classes 或它们位于什么文件夹中并不重要。
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.");
}
}
}
我的 C# 项目中有部分 class,即从 Entity Framework 自动生成的代码。现在我想修改或添加一些功能、属性或方法到 class。我在项目的 EntityFrameworkModel.tt\Author.cs
选项卡下有自动生成的 class 代码,而其他相关的 class 代码在另一个文件夹中,即同一项目中的 GraphData
。
我也知道部分 classes 的名称应该相同,而文件名可能不同或相同。我做了同样的事情,但是当我将 Author.cs
的对象定义为:
protected override EvoObject ConvertCPV(Author _author)
{
if (_author.???)
{
//...
}
}
我无法访问 GraphData\Author.cs
中定义的方法(示例代码中的问号),而 EntityFrameworkModel.tt\Author.cs
中定义的属性只能访问。
我在这里附加了 Solution Explorer
图片:
如何从两个 classes 访问属性和方法?
- 在 EntityFrameworkModel.tt 之外创建您自己的 class - 将其命名为 Author.cs,使 class 部分。
partial 的整个想法是让代码生成器不关心你的代码。你修改了一个生成的 class,下一次重新生成会杀死更改。
I did same but when I defined the object for Author.cs as:
啊,不,你没有,因为你声称你的定义是:
protected override EvoObject ConvertCPV(Author _author)
未定义对象。
I can't access the methods defined in GraphData\Author.cs
因为命名空间?检查命名空间 - 当它们属于与 EntityFrameworkModel.tt
相同的命名空间时,将它们放在子文件夹中是不好的whereas the properties defined in EntityFrameworkModel.tt\Author.cs are only accessible.
部分 classes 不允许更改另一个部分 - 暂时不允许,考虑替换语法。
我在一个项目中也有类似的设置。
为了保持整洁,我还有一些文件夹用于放置某些部分 classes,您只需要确保命名空间与自动生成的 class.
相同当您向文件夹添加新 class 时,命名空间将自动包含文件夹的名称 - 您可以从命名空间中删除文件夹名称 - 在这种情况下您应该只有项目名称.
如果命名空间不同,则部分 class 不属于同一 class。 这就是您无法访问的原因新 functions/Properties.
此外,即使您的文件名和 class 名称可以不同,但最好保持相同 - 如果文件具有相同的 class 将更容易找到名字.
查看 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."
它没有明确说明这一点,但这意味着 class 的部分定义必须在 same 命名空间中声明.项目中的哪些文件包含 classes 或它们位于什么文件夹中并不重要。
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.");
}
}
}