C# 使自动生成的分部类实现自定义接口
最近我一直在做一个Silverlight项目,其中有一个自动生成的类位于*C# 使自动生成的分部类实现自定义接口,c#,c#-4.0,silverlight-4.0,entity,partial-classes,C#,C# 4.0,Silverlight 4.0,Entity,Partial Classes,最近我一直在做一个Silverlight项目,其中有一个自动生成的类位于*File.Web.g.cs中,定义如下: [DataContract(Namespace="http://schemas.datacontract.org/2004/07/Project.Web.Models")] public sealed partial class SwitchDevice : Entity { /// <summary> /// Gets or sets
File.Web.g.cs
中,定义如下:
[DataContract(Namespace="http://schemas.datacontract.org/2004/07/Project.Web.Models")]
public sealed partial class SwitchDevice : Entity
{
/// <summary>
/// Gets or sets the 'ID' value.
/// </summary>
[DataMember()]
[Editable(false, AllowInitialValue=true)]
[Key()]
[RoundtripOriginal()]
public int ID
{
get
{
return this._id;
}
set
{
if ((this._id != value))
{
this.OnIDChanging(value);
this.ValidateProperty("ID", value);
this._id = value;
this.RaisePropertyChanged("ID");
this.OnIDChanged();
}
}
}
}
由于某些原因,VS2010未看到位于Web.G.CS文件中的定义,并生成错误:
“Project.Web.Models.SwitchDevice”未实现接口
成员
'Project.Web.Models.IDevice.ID'PATH\Project\Interfaces\ISwitchDevice.cs
我浏览并阅读了很多网页,但我没有真正发现类似的问题。也许我只是做错了,我不是专家
甚至有可能做到这一点吗?提前感谢您提供的任何提示和帮助 你想做的很好,我一直都在做
确保在同一命名空间下和同一项目内都有部分类定义文件。您正在使用该类实现的接口可能位于另一个程序集中,或者您将失去部分优势,并且必须从调用代码中引用dal,这是您设计的一个功能;与DAL隔离并根据接口编码。您尝试做的很好,我一直都在做
确保在同一命名空间下和同一项目内都有部分类定义文件。您正在使用该类实现的接口可能位于另一个程序集中,或者您将失去部分优势,并且必须从调用代码中引用dal,这是您设计的一个功能;与DAL隔离并根据接口编码。很可能,自动生成的类
SwitchDevice
(密封的类)不在命名空间Project.Web.Models
中,就像您编写的类SwitchDevice
一样
要使分部类按预期工作,类定义的所有部分都应位于同一命名空间中。否则,在不同的名称空间中只有两个同名的(不相关的)类,它们中的partial
修饰符不起任何作用
如果这是真的,您需要做的是将您自己的类片段移动到与自动生成的类相同的命名空间中,例如:
namespace Project.Web.Models
{
public interface IDevice
{
int ID { get; set; }
}
}
namespace Some.Namespace // copy the name from the auto-generated file
{
public partial class SwitchDevice : Project.Web.Models.IDevice
{
}
}
很可能,自动生成的类SwitchDevice
(密封的类)不在命名空间Project.Web.Models
中,就像您编写的类SwitchDevice
一样
要使分部类按预期工作,类定义的所有部分都应位于同一命名空间中。否则,在不同的名称空间中只有两个同名的(不相关的)类,它们中的partial
修饰符不起任何作用
如果这是真的,您需要做的是将您自己的类片段移动到与自动生成的类相同的命名空间中,例如:
namespace Project.Web.Models
{
public interface IDevice
{
int ID { get; set; }
}
}
namespace Some.Namespace // copy the name from the auto-generated file
{
public partial class SwitchDevice : Project.Web.Models.IDevice
{
}
}
您是否101%确定生成的类也位于命名空间Project.Web.Models
?假设错误消息是逐字复制的,那么它是…@jeroenh:不,您无法推断。错误消息引用了第二个代码片段中的类。我指的是第一个片段中的类(自动生成的类)。这种模式(在设计器生成的部分类上实现接口)在常规的.Net中确实有效,所以问题可能与Silverlight有关。@Jon同意,很抱歉,您是否101%确定生成的类也在命名空间Project.Web.Models
中?假设错误消息是逐字复制的,则是…@jeroenh:不,您无法推断。错误消息引用了第二个代码片段中的类。我指的是第一个片段中的类(自动生成的类)。这种模式(在设计器生成的部分类上实现接口)在常规.Net中确实有效,因此可能问题与Silverlight有关。@Jon同意,对此表示抱歉Mike,请注意“同一个项目”。在不同的集合中不能有分部类Mike,请注意“同一个项目”。你不能在不同的集合中使用分部类。我正好遇到了这个问题,你的解决方案起到了帮助。奇怪的是,VS也生成了名称空间错误的cs文件(包含分部类的文件),这肯定是某种错误。我确实遇到了这个问题,您的解决方案帮助了我。奇怪的是,VS也生成了名称空间错误的cs文件(具有分部类的文件),这肯定是某种错误。