我在名为"MyProject.Data"的项目中有一个名为"Article"的类,它充当我的Web应用程序的数据层.
我有一个名为"MyProject.Admin"的独立项目,它是一个基于Web的管理系统,用于查看/编辑数据,并使用ASP.NET动态数据构建.
基本上我想使用部分类扩展Article类,这样我就可以使用"UIHint"扩展器扩充其中一个属性,这将允许我用FCKEdit控件替换普通的多行文本框.
我的部分类和扩展器看起来像这样:
[MetadataType(typeof(ProjectMetaData))]
public partial class Project
{
}
public class ProjectMetaData
{
[UIHint("FCKeditor")]
public object ItemDetails { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果部分类与原始部分类在同一个项目中 - 即MyProject.Data项目,这一切都可以正常工作.
但是UI行为不应该位于数据层中,而应该位于Admin层中.所以我想把这个类移到MyProject.Admin.
但是,如果我这样做,功能就会丢失.
我的基本问题是:我可以在单独的项目中有2个部分类,但两者都指的是同一个"类"吗?
如果没有,有没有办法完成我正在尝试做的事情,而不将数据层逻辑与UI逻辑混合在一起?
我正在生成大量的ASP.NET MVC脚手架代码.所有生成的文件都是使用标准命名约定的部分类.例如,我的员工控制器文件名为EmployeeController.cs.如果我希望使用自定义的非生成逻辑扩展EmployeeController,我将创建一个名为EmployeeControllerCustom.cs的第二个部分类文件.我将自定义和生成的逻辑分成两个不同的文件,因此下次生成EmployeeController时,我的自定义更改不会被覆盖.将"自定义"后缀添加到文件名对我来说似乎是合理的,但是我是否应该遵循更成熟的部分类文件命名约定?
有没有办法我可以像这样生成一个代码文件:
public partial class A {
public string a {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
然后在另一个文件中:
public partial class A {
[Attribute("etc")]
public string a {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
这样我可以从数据库生成一个类,然后使用非生成的文件来标记它?
我不认为这是可能的,但如果是,那么我需要它:)
我有一个由Visual Studio 2008从wsdl.exe命令行工具自动生成的代理文件.
代理输出是部分类.我想覆盖生成的默认构造函数.我宁愿不修改代码,因为它是自动生成的.
我尝试制作另一个部分类并重新定义默认构造函数,但这不起作用.然后我尝试使用覆盖和新关键字,但这不起作用.
我知道我可以继承部分类,但这意味着我必须将所有源代码更改为指向新的父类.我宁愿不必这样做.
任何想法,解决方法或黑客?
//Auto-generated class
namespace MyNamespace {
public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
public MyWebService() {
string myString = "auto-generated constructor";
//other code...
}
}
}
//Manually created class in order to override the default constructor
namespace MyNamespace {
public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
public override MyWebService() { //this doesn't work
string myString = "overridden constructor";
//other code...
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含所有数据库逻辑的类库.我的DAL/BLL.
我有一些Web项目将使用相同的数据库和类,所以我认为将数据层抽象到自己的项目中是一个好主意.
但是,当为某些项目的类添加功能时,我想向某些类添加方法.
例如,我的数据层有Product和SomeItem对象:
// Data Access Layer project
namespace DAL {
public class Product {
//implementation here
}
public class SomeItem {
//implementation here
}
}
Run Code Online (Sandbox Code Playgroud)
在一个项目中,我想添加一个由不同内容项使用的接口,所以我有一个名为的类:
// This is in Web Project
namespace DAL {
public partial class Product : ICustomBehaviour {
#region ICustomBehaviour Implementation
TheSharedMethod();
#endregion
}
}
Run Code Online (Sandbox Code Playgroud)
使用相同的命名空间在单独的项目(创建依赖项)中编写部分类是一个好主意吗?如果这是一个坏主意,我怎样才能使这种类型的功能工作?
它似乎不想在编译时合并它们,所以我不确定我做错了什么.
我没有太多使用这两种方法来扩展类或创建针对类的扩展方法的经验.通过寻找其他人的工作,我在这里有一个问题.
我看到人们使用parital类来扩展项目中的实体类.同时,在同一个项目中,还有另一个包含很多实体类扩展方法的文件夹.
这样做是对的吗?我的意思是这两种方式都运作良好.当我想要扩展课程时,你能给我一些真正的练习吗?
使用"新"样式类(我在python 3.2中)有没有办法将类分割为多个文件?我有一个很大的类(从面向对象的设计角度来看,它应该是一个单独的类,考虑耦合等,但是为了便于编辑类,分割几个文件会很好.
我一直在使用partial class修饰符,以便将helper类放在自己的文件中.
今天我们得到了一个新人,他说他工作的最后一个团队不允许部分类,因为修改一个单独的文件中的帮助器类会导致主要的部分类文件与更改失败.此外,他们只允许在主类中放置辅助类作为最后的手段,以便所有内容保持解耦.
你怎么看?使用像这样的部分类有什么问题,还是归结为偏好?
例如,我通常有这样的事情:
...
// Inside of MainClass.cs I have code like this:
public abstract partial class MainClass
{
// ...
}
// Then in the MainClass.Helper1.cs I have:
partial class MainClass
{
private class Helper1
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud) 有没有办法让部分类'构造函数调用另一个我或不可能定义的方法?
基本上我的部分类构造函数是定义的:
public partial class Test
{
public Test()
{
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够以某种方式插入额外的代码,以便在调用类构造函数后运行.
另外,有没有办法在调用构造函数后有多个文件注入额外的代码?
partial-classes ×10
c# ×8
.net ×1
asp.net ×1
attributes ×1
coding-style ×1
constructor ×1
dll ×1
overriding ×1
python ×1
web-services ×1
wsdl ×1