メソッドの型指定(回答)
答え
C
解説
この問題では、Save
メソッドは、User
クラスもしくはUser
クラスを継承したクラスのいずれかがパラメータに渡すことができるメソッドであることが条件から分かります。
そのような任意のクラスを受け付けるメソッドとして、「ジェネリック メソッド」というものがあります。
特徴としては、メソッド名の後ろに <T>
という個所があり、引数にも T
が使用されています。
呼出元が <T>
の箇所に例えば <User>
と指定することによって T = User
と置き換えて処理を行うことができます。
つまり、以下のようなメソッドに置き換わるわけです。
しかし、これではUser
クラス以外でも指定できてしまいます。
そこで、指定できるクラスを制約する方法として、「型パラメータの制約」というものがあります。
メソッドのパラメータ指定の後ろに追加された where T: User
という部分が制約です。
ここでは、「Tは、Userクラスが基底クラスであるか、そのクラスから派生していること
」が制約の内容になります。
しかし、これでは条件のうち、「Userクラスから継承されたクラスは、パラメータなしのコンストラクターを使用するクラスのみ許されなければなりません。
」という条件を満たすことができません。
そのため、この条件を制約する方法として、「new制約」というものがあります。
先ほどの型パラメータの制約に、カンマ区切りに続いて new()
が追加されました。
これによって、「Tは、Userクラスが基底クラスであるか、そのクラスから派生していること。また、パブリックでパラメータなしのコンストラクターが必要である。
」が制約の内容になります。
しかし、選択肢を見ると「new(), User
」と「User, new()
」の2つのパターンが存在しています。
new制約とほかの制約を併用する場合は、new制約を最後に指定する必要があります。
そのため、正解は「User, new()
」ですので注意してください。
参考
Last updated