私はasync/awaitを全く新しくしていて、2年前に書いた完全に同期したアプリケーションを「改良」してきました。私は私の解決策に不満を抱いている次のような状況があります。抽象クラスの子に対して静的コンストラクタを作成できますか?
XAMLは、以下の二つのクラスにバインドされています
XAML
private InsuranceEditor _primaryinsurance;
public InsuranceEditor PrimaryInsurance
{
get { return _primaryinsurance; }
set { if (_primaryinsurance == value) return; _primaryinsurance = value; OnPropertyChanged("PrimaryInsurance"); }
}
private InsuranceEditor _secondaryinsurance;
public InsuranceEditor SecondaryInsurance
{
get { return _secondaryinsurance; }
set { if (_secondaryinsurance == value) return; _secondaryinsurance = value; OnPropertyChanged("SecondaryInsurance"); }
}
クラス、PrimaryInsurance、およびSecondaryInsurance抽象クラスの保険継承:
abstract class InsuranceEditor : SimpleViewModelBase, ISave, IDataErrorInfo
{
.................
// Constructor
public InsuranceEditor(PatientDemographicsEditor patient, Billing service)
{
...
}
Factoryパターンを使用しますプライマリインシュランスの非同期建設(Async OOP Constructor)
private async Task<PrimaryInsurance> InitializeAsync()
{
// asyncData = await GetDataAsync();
return this;
}
public static Task<PrimaryInsurance> Create(PatientDemographicsEditor patient, Billing service)
{
var ret = new PrimaryInsurance(patient, service);
return ret.InitializeAsync();
}
// Constructor
private PrimaryInsurance(PatientDemographicsEditor patient, Billing service)
: base(patient, service)
{
Editor_Id = 1;
........
}
class SecondaryInsurance : InsuranceEditor
{
// Constructor
private SecondaryInsurance(PatientDemographicsEditor patient, Billing service)
: base(patient, service)
{
Editor_Id = 2;
............................
}
}
論理的には、プライマリとセカンダリの両方の保険は、Editor_Id
でのみ異なるので、共通のInsuranceEditor
を継承するのは当然のようです。この問題は現在、プライマリとセカンダリの保険にasync/awaitを「正しく」適用することによって得られます。私は、使用のようなものになりたい:(。必ずしも抽象クラスInsuranceEditor
の静的メソッド)
Create(...)
が
PrimaryInsurance
の静的メソッドとして認識されている
PrimaryInsurance = await PrimaryInsurance.Create(....)
をこれを行うことができますか?
編集#1。この質問を投稿した後、私はそれが既に質問されているかもしれないと思っている、What's the correct alternative to static method inheritance?と私はCで行うことができないことを#。これは正しいです?
編集#2:私はVSに持っています問題は、使用方法の説明文が付いています:
PrimaryInsurance =待つPrimaryInsurance.Create(患者、BILLING)。
VSは私にその指示:
メンバー 'InsuranceEditor.Create(PatientDemographicsEditor、課金)' インスタンス参照してアクセスすることができません。 PrimaryInsuranceではなく、代わりにタイプ 名前で
それを修飾し、私はVSが(エラーがないように)(...)を作成するために許可した場合、その後、それはabstact InsuranceEditorクラスでこれを作りますクラス。
internal Task<InsuranceEditor> Create(PatientDemographicsEditor patient, Billing bILLING)
{
throw new NotImplementedException();
}
私は間違っていますか?
もしそれらがすべて異なるのであれば、なぜEditor_Idが1つのクラスを使用し、Editor_Idをプライベートコンストラクタのパラメータとして渡すのではないのですか?次に、あなたは 'InsuranceEditor.CreatePrimary(...)'または 'InsuranceEditor.CreateSecondary(...)'を待つだけです。 –
@ScottChamberlainそれはまさに質問を書いた後に起こったことです。しかし、より難しい場合があるので、子クラスの静的なCreateを使用して継承をどのように使用できるかについてのアイデアを期待しています。 –
私は本当にあなたの質問がこれであるか分かりません。あなたは "できますか"と尋ねますが、あなたの質問には実例があります。あなたの質問は何ですか? –