gpt4 book ai didi

C#:重写父类的一个属性

转载 作者:太空狗 更新时间:2023-10-29 21:15:03 26 4
gpt4 key购买 nike

我有一个继承自 X509Certificate2 的类。我希望 NotAfter 属性使用 UTC 而不是本地时间。我是 C# 的新手,想知道下面的内容是否是最好的方法?

internal class Certificate : X509Certificate2
{
public new DateTime NotAfter
{
get { return base.NotAfter.ToUniversalTime(); }
}

编辑当我将其更改为:

public override DateTime NotAfter 
{
get { return base.NotAfter.ToUniversalTime(); }
}

Resharper 提示“没有适合覆盖的属性”

最佳答案

你在那里所做的是隐藏成员。如果您派生的类已将该属性标记为 virtual,或者正在从它的基础(如果它有)覆盖它,您可以使用 override 关键字:

public override DateTime NotAfter

当基类已经将其标记为virtual时,可以使用成员隐藏,但是如果有人将您的类的引用转换为基类并访问该成员,他们会绕过您的 new 隐藏。使用 override 的真正继承,不会发生此问题。

正如某人所指出的,此属性未标记为 virtual:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.notafter.aspx

如果人们直接使用您的类,成员隐藏将允许您绕过这个问题,但是当有人将您的类转换回基类型时,他们将获得基值:

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.

关于C#:重写父类的一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3943911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com