gpt4 book ai didi

c# - 在 C# 中覆盖类并访问使用覆盖方法的虚拟方法

转载 作者:行者123 更新时间:2023-11-30 21:49:52 24 4
gpt4 key购买 nike

我是第一次在 C# 中使用覆盖方法,我认为我已经很好地掌握了基础知识。然而,我的方法有点复杂,有些方法在方法中调用。

我本质上是想通过找到一种方法来使用基类方法但调用基类方法使用的覆盖方法来节省自己的代码编写。

这是我的问题的一个例子,因为我可能没有很好地解释它:

namespace exampleCode
{
public class BaseClass : AnotherClass
{
public static string OrderStorageContainer = "Deliverables";

public virtual string CustomerStorageContainer = "CustomerDocs";

public virtual string GetSomething(typeStorage st, string FileName)
{
if (String.IsNullOrWhiteSpace(FileName))
{
throw new ArgumentNullException("FileName", "The filename of the file should be supplied!");
}

var c = GetReference(GetName(st));
return c.ToString();
}
public virtual string GetName(typeStorage st)
{
switch (st)
{
case typeStorage.CustomerProvided:
return CustomerStorageContainer.ToLower();
case typeStorage.SystemGenerated:
return OrderStorageContainer.ToLower();
}
throw new InvalidOperationException("No container defined for storage type: " + st.ToString());
}

public virtual string GetReference()
{
//does stuff
}
}

public class DervivedClass : BaseClass
{
public static string QuoteStorageContainer = "QuoteDeliverables";

public override string CustomerStorageContainer = "QuoteCustomerDocs";

public override string GetSomething(typeStorage st, string FileName)
{
if (String.IsNullOrWhiteSpace(FileName))
{
throw new ArgumentNullException("FileName", "The filename of the file should be supplied!");
}

var c = GetReference(GetName(st));
return c.ToString();
}

public override string GetName(typeStorage st)
{
switch (st)
{
case typeStorage.CustomerProvided:
return CustomerStorageContainer.ToLower();
case typeStorage.SystemGenerated:
return QuoteStorageContainer.ToLower();
}
throw new InvalidOperationException("No container defined for storage type: " + st.ToString());
}

}
}

基本上,我希望派生类使用覆盖 GetSomething 方法。但是,我希望它使用覆盖的 GetName() 方法的结果调用基类 GetReference() 方法。

这是正确的路线吗?我发现很难在网上找到类似的示例。

任何指针都会很棒!

最佳答案

您的实现似乎是正确的。在您不覆盖 DerivedClass 中的 GetReference() 方法之前,它将是正确的。

如果你想让var c = GetReference(GetName(st));这一行总是调用基类,你应该采取预防措施,把它写成base.GetReference(GetName(st ))

关于c# - 在 C# 中覆盖类并访问使用覆盖方法的虚拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36715954/

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