C#:重写父类的属性我有一个继承自X509Certificate2的类。我希望NotAfter属性为UTC而不是本地时间。我是C#的新手,想知道下面的内容是执行此操作的最佳方法吗?内部类证书:X509Certificate2{publicnewDateTimeNotAfter{get{returnbase.NotAfter.ToUniversalTime();}}编辑当我将其更改为:publicoverrideDateTimeNotAfter{get{returnbase.NotAfter.ToUniversalTime();}}Resharper抱怨“没有合适的属性可以覆盖”你在那里做了什么成员隐藏。如果你的派生类已经将属性标记为虚拟,或者从它的基类(如果有的话)覆盖它,那么使用override关键字:publicoverrideDateTimeNotAfter当基类没有将它标记为虚拟时,你可以使用成员隐藏,但是如果有人将对您的类的引用强制转换为基类并访问该成员,他们将绕过您的新隐藏。使用overridetrueinheritance,就不会出现这个问题。正如有人指出的那样,此属性未标记为虚拟:http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.notafter.aspx如果人们直接使用您的课程,成员隐藏将允许您解决这个问题,但是当有人将您的类转换回基类型时,他们将获得基值:classMyClass:Cert...MyClassc=newMyClass();日期时间foo=c。不之后;//你新指定的属性。证书cBase=(Cert)c;foo=cBase.NotAfter;//糟糕,基值。继承可以解决这个问题,但仅限于虚拟成员。不,这样你只是使用了一个新的隐藏属性。请使用“覆盖”而不是“新建”。有关“new”关键字作为修饰符的详细信息,请参见此处:http://msdn.microsoft.com/en-us/library/435f1dw2.aspx编辑:如以下评论中所述,X509Certificate2中的属性未标记为虚拟的,所以在这种情况下不能被覆盖。默认情况下,C#中的方法/属性不是虚拟的(就像它们在Java中一样)。您确定您的NotAfter属性在基类中被定义为虚拟的吗?以上就是C#学习教程:C#:涵盖父类属性共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
