C# 可以为抽象类的子类创建静态构造函数吗?
我对async/await完全陌生,并且一直在“改进”两年前编写的一个完全同步的应用程序。我有以下情况,我对我的解决方案不满意 XAML绑定到以下两个类: XAML 类、主要保险和次要保险继承自抽象类保险:C# 可以为抽象类的子类创建静态构造函数吗?,c#,oop,asynchronous,C#,Oop,Asynchronous,我对async/await完全陌生,并且一直在“改进”两年前编写的一个完全同步的应用程序。我有以下情况,我对我的解决方案不满意 XAML绑定到以下两个类: XAML 类、主要保险和次要保险继承自抽象类保险: abstract class InsuranceEditor : SimpleViewModelBase, ISave, IDataErrorInfo { ................. // Constructor public In
abstract class InsuranceEditor : SimpleViewModelBase, ISave, IDataErrorInfo
{
.................
// Constructor
public InsuranceEditor(PatientDemographicsEditor patient, Billing service)
{
...
}
工厂模式用于初级保险的异步构建(
我做错了什么?您仍然没有提供一个可靠地再现问题的好方法。但是根据示例程序语句和您引用的错误消息,您似乎试图在与属性名称不明确的上下文中使用
PrimaryInsurance
标识符
如果要保留属性的名称,则无论在何处使用类型名称,都需要对其进行完全限定。例如:
PrimaryInsurance = await MyNamespace.PrimaryInsurance.Create(Patient, BILLING);
using PrimaryInsuranceType = MyNamespace.PrimaryInsurance;
其中MyNamespace
是类型的实际名称空间
如果名称空间特别长,或者出于任何其他原因,您希望不必每次都键入整个内容,则可以使用指令将类型名称别名为。例如:
PrimaryInsurance = await MyNamespace.PrimaryInsurance.Create(Patient, BILLING);
using PrimaryInsuranceType = MyNamespace.PrimaryInsurance;
然后您的程序语句可以如下所示:
PrimaryInsurance = await PrimaryInsuranceType.Create(Patient, BILLING);
当然,PrimaryInsuranceType
只是一个例子。您可以使用您想要的任何类型别名,只要它与属性名称本身(或类中的任何其他属性名称)不同.如果它们的不同之处在于编辑器Id
为什么不使用一个类并将编辑器Id作为参数传递给私有构造函数?然后您只需执行等待保险编辑器.CreatePrimary(…)
或等待保险编辑器.CreateSecondary(…)
@ScottChamberlain这正是我写完这个问题后想到的。但我可以看到其他情况下这会更困难,所以我希望了解如何在这种情况下通过对子类的静态创建来使用继承。我不确定你在这方面的问题是什么。你会问“可以做到吗?”但是您的问题中似乎有一个有效的示例。您的问题到底是什么?静态成员必须始终在声明它们的类型上调用,而不是子类型。因此,如果您想调用BaseClass.Create()
而不仅仅是Create()
。使用实例方法,您可以调用Create()
在子类中,因为它也是基类的一个实例,因此它具有相同的公共和受保护的实例成员,但静态成员绑定到类型(想想类型
对象),而不是该类型的实例。@JamesFaix:“必须始终对声明静态成员的类型而不是子类型调用静态成员”--这是错误的。例如,给定类A{public Static void M(){}}
和类B:A{}
,您可以调用B.M();
A
中声明的
方法绝对是B
的有效静态成员,可以这样引用。谢谢。这样做了。我已经读了大约一百遍“Minimal,Complete,and…”。我显然没有读到它(因为我认为我在这个问题上是这样做的)。一些关于“Minimal…”的好例子。。。。"这将非常有帮助。@Alan:我不知道如何比在和页上更好地解释它。我可以告诉你你的问题是如何不符合标准的:不可能简单地复制/粘贴你发布的代码,并且在不做任何更改的情况下,尝试编译代码来重现你报告的问题。请确保你在li阅读了文章nks在页面的末尾。阅读也有加分(这是另一个帮助人们理解在提问时提供好的代码示例这一至关重要的需要的资源)。非常感谢你的批评——我还在学习中。(如果更多的评论者能效仿你的例子,那将是非常好的!)谢谢(链接到sscce.org和我出错的地方最有帮助)。
PrimaryInsurance = await PrimaryInsuranceType.Create(Patient, BILLING);