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

本文关键字:构造函数 抽象 | 更新日期: 2023-09-27 17:50:28

我试图理解MVC框架中提供的以下类;看起来这个类应该是抽象的,但它不是,但是这个类可以编译。类实际上是抽象的,尽管缺少"抽象"关键字?我遗漏了什么?

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; }
    }
}
编辑:

经验教训:如果没有提供二进制文件的源代码,在Visual Studio中使用"Go To Definition"将提供一些看起来很像源代码的东西…这与在Eclipse中使用"Open Declaration"不同,后者会显示一些看起来不像源代码的东西。

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

这是一个Microsoft的类,我假定您在Visual Studio中通过"Go to Definition"上下文菜单检索了代码。该代码是通过反射类型自动生成的,仅用于显示声明而不是实现内容。如果您使用。net reflector或dotrereflect工具,那么您将看到实现的主体。

您错过的是您实际上并没有查看类的源代码。它是ASP的一部分。. NET,文档在这里。源代码保存在Redmond Washington,你的机器够不到,也不是. net参考源代码的一部分。

你得到的是一个自动生成的文档,由Microsoft.AspNet.Identity.EntityFramework.dll程序集中的元数据生成。它只包含类声明,代码被c#编译器编译成MSIL。你需要一个好的反编译器来查看类似的代码,Reflector和ILSpy很受欢迎。

在Visual Studio中使用Go To Definition时要小心。只有当IDE可以找到它时,您才能看到真正的源代码。