Fun*_*der 6 c# inheritance properties
我有一个继承自X509Certificate2的类.我希望NotAfter属性是UTC而不是本地时间.我对C#很陌生,并且想知道我下面的内容是否是最好的方法呢?
internal class Certificate : X509Certificate2
{
public new DateTime NotAfter
{
get { return base.NotAfter.ToUniversalTime(); }
}
Run Code Online (Sandbox Code Playgroud)
编辑 当我把它更改为:
public override DateTime NotAfter
{
get { return base.NotAfter.ToUniversalTime(); }
}
Run Code Online (Sandbox Code Playgroud)
Resharper抱怨说"没有合适的财产可以覆盖"
Ada*_*rth 10
你在那里做的是成员隐藏.如果您派生的类已将该属性标记为virtual,或者从它的基础覆盖它(如果有的话),则使用override关键字:
public override DateTime NotAfter
Run Code Online (Sandbox Code Playgroud)
当基类没有标记它时virtual,可以使用成员隐藏,但是如果有人将您的类的引用强制转换为基类并访问该成员,则它们将绕过您的new隐藏.使用true继承时override,不会发生此问题.
正如有人所指出的那样,这个属性没有标记virtual:
如果人们直接使用你的类,会员隐藏将允许你解决这个问题,但是当有人将你的类强制转换回基类型时,他们会得到基值:
class MyClass : Cert...
MyClass c = new MyClass();
DateTime foo = c.NotAfter; // Your newly specified property.
Cert cBase = (Cert)c;
foo = cBase.NotAfter; // Oops, base value. Inheritance cures this, but only with virtual members.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11255 次 |
| 最近记录: |