非抽象C#类中的无体构造函数

时间:2014-03-14 15:37:53

标签: c# constructor abstract-class

我试图理解MVC框架中提供的以下类;看起来这个类应该是抽象的,但它不是,但这个类编译。尽管缺少了#34抽象"该课程实际上是抽象的吗?关键词?我在这里缺少什么?

namespace Microsoft.AspNet.Identity.EntityFramework
{
    public class IdentityUser : IUser
    {
        public IdentityUser();
        public IdentityUser(string userName);

        public virtual ICollection<IdentityUserClaim> Claims { get; }
        public virtual string Id { get; set; }
        public virtual ICollection<IdentityUserLogin> Logins { get; }
        public virtual string PasswordHash { get; set; }
        public virtual ICollection<IdentityUserRole> Roles { get; }
        public virtual string SecurityStamp { get; set; }
        public virtual string UserName { get; set; }
    }
}

修改

经验教训:如果没有为二进制文件提供源代码,请使用&#34;转到定义&#34;在Visual Studio中将提供看起来像源代码的东西......这与使用&#34; Open Declaration&#34;在Eclipse中,它会向你展示一些看起来不像源的东西。

2 个答案:

答案 0 :(得分:10)

这是Microsoft的一个类,我认为你通过&#34; Go to Definition&#34;来检索代码。 Visual Studio中的上下文菜单。此代码是通过反映类型自动生成的,仅用于显示声明而不是实现内容。如果您使用.NET Refector或dotReflect工具,那么您将看到实现的主体。

答案 1 :(得分:2)

您缺少的是您实际上正在查看该类的源代码。它是ASP.NET的一部分,documented here。源代码保存在华盛顿州雷蒙德市,不在您的机器范围内,不属于.NET Reference Source

您获得的是自动生成的文档,该文档由Microsoft.AspNet.Identity.EntityFramework.dll程序集中的元数据生成。其中只包含类声明,代码由C#编译器编译成MSIL。你需要一个好的反编译器才能看到代码的相似之处,Reflector和ILSpy很受欢迎。

在Visual Studio中使用“转到定义”时要小心。您只能在IDE找到它时看到真正的源代码。