我有一个由代码模板自动生成的抽象类。然后我们有几个派生自这个类的类。该类有一个特定属性,对于其中一个派生实现,我想覆盖 getter 和 setter。不幸的是,我找不到覆盖该属性的方法,因为它没有被声明为虚拟的。
因此,作为另一种方法,我决定让属性受到保护,然后在部分类 ( .shared.cs
) 中创建一个公共虚拟属性,该属性有效地包装了受保护的属性。然后我可以在一个特定的实现中覆盖它。
所以在服务器端这看起来不错,但是一旦我构建它,事实证明 ria 在客户端为我生成的部分共享文件似乎没有受保护属性的可见性。
ClassA.cs
:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behaviour in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ABC.Web.Models.DomainModel
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
[RoundtripOriginal]
public abstract partial class ClassA
{
public int Id { get; set; }
public string Title { get; set; }
protected string ApplicationNumber { get; set; }
}
}
ClassA.shared.cs
namespace ABC.Web.Models.DomainModel
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
public abstract partial class ClassA
{
[IgnoreDataMember]
public virtual string ApplicationNumberAccessor
{
get
{
return this.ApplicationNumber;
}
set
{
this.ApplicationNumber = value;
}
}
}
}
这有效地给出了错误'ABC.Web.Models.DomainModel.ClassA' does not contain a definition for 'ApplicationNumber' and no extension method 'ApplicationNumber' accepting a first argument of type 'ABC.Web.Models.DomainModel.ClassA' could be found (are you missing a using directive or an assembly reference?)
双击错误时,它会将我带到文件的客户端版本,由于某种原因它看不到该受保护的属性。
知道为什么吗?或者有没有办法(首先使用数据库)标记一个字段,使其生成为虚拟的?