Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以为抽象类的子类创建静态构造函数吗?_C#_Oop_Asynchronous - Fatal编程技术网

C# 可以为抽象类的子类创建静态构造函数吗?

C# 可以为抽象类的子类创建静态构造函数吗?,c#,oop,asynchronous,C#,Oop,Asynchronous,我对async/await完全陌生,并且一直在“改进”两年前编写的一个完全同步的应用程序。我有以下情况,我对我的解决方案不满意 XAML绑定到以下两个类: XAML 类、主要保险和次要保险继承自抽象类保险: abstract class InsuranceEditor : SimpleViewModelBase, ISave, IDataErrorInfo { ................. // Constructor public In

我对async/await完全陌生,并且一直在“改进”两年前编写的一个完全同步的应用程序。我有以下情况,我对我的解决方案不满意

XAML绑定到以下两个类:

XAML

类、主要保险和次要保险继承自抽象类保险:

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);