1. ホーム
  2. c#

[解決済み] C#: 抽象クラスまたはインターフェースのインスタンスを作成できない

2022-02-27 13:44:36

質問

HotelsProのウェブサービスを使用しており、インスタンスを作成しようとしていますが、エラーが発生します。

抽象クラスまたはインターフェイスのインスタンスを作成できません。 'HotelsPro.hotelsProSvc.b2bHotelSOAPPortType' です。

私がやろうとしていることは、以下のとおりです。

FORM1.CS

hotelsProSvc.b2bHotelSOAPPortType a = new b2bHotelSOAPPortType(); getAvailableHotelResponse getres = new getAvailableHotelResponse(); getres=a.getAvailableHotel(apiKey, "A990", checkIn, checkOut, "EUR", "UK", false, rooms, f);

解決方法は?

C#では、抽象クラスやインターフェースのインスタンスを作成することはできません。
b2bHotelSOAPPortTypeは、インターフェースか抽象クラスのどちらかです。 もしこの方法で新しいオブジェクトを作るつもりなら(例えば依存性注入を使うのではなく)、 b2bHotelSOAPPortTypeを実装した具象クラスを見つけなければなりません。 new ということです。

例えば

hotelsProSvc.b2bHotelSOAPPortType a = new Concreteb2bHotelSOAPPortType();

Concreteb2bHotelSOAPPortTypeがb2bHotelSOAPPortTypeを実装していると仮定して。

より良い方法は、AutofaqのようなDIコンテナで、これら2つのクラスの関係を設定することでしょう。

b2bHotelSOAPPortTypeがインターフェースである場合、次のように実装されるでしょう。

interface b2bHotelSOAPPortType {

}

抽象クラスであれば、このように

abstract class b2bHotelSOAPPortType  {

}

必要なのは、b2bHotelSOAPPortTypeを直接または間接的に実装しているクラスを見つけることです。 もし、直接的に実装していれば、次のようになります。

class Concreteb2bHotelSOAPPortType : b2bHotelSOAPPortType {

}

Visual Studioを使用している場合、どのクラスがこのインターフェースや抽象クラスを実装しているかは、かなり簡単に見つけることができます。