我试图理解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中,它会向你展示一些看起来不像源的东西。
答案 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找到它时看到真正的源代码。