インターフェイスは関数の戻り型にすることができます。はいの場合、利点は何ですか。たとえば、インターフェイスの配列が返される次のコードは正しいです。
public interface Interface
{
int Type { get; }
string Name { get; }
}
public override Interface[] ShowValue(int a)
{
.
.
}
はい、インターフェースを返すことができます。
A
クラスとB
それぞれがインターフェースを実装するとしましょうIc
:
public interface Ic
{
int Type { get; }
string Name { get; }
}
public class A : Ic
{
.
.
.
}
public class B : Ic
.
.
.
}
public Ic func(bool flag)
{
if (flag)
return new A();
return new B();
}
この例func
はファクトリメソッドのようなものです—異なるオブジェクトを返すことができます!
はい、interface
非常に有効な戻り値です。インターフェイスの定義を返すのではなく、そのインターフェイスのインスタンスを返すことを忘れないでください。
利点は非常に明確です。次のコードを検討してください。
public interface ICar
{
string Make { get; }
}
public class Malibu : ICar
{
public string Make { get { return "Chevrolet"; } }
}
public class Mustang : ICar
{
public string Make { get { return "Ford"; } }
}
ICar
これで、それぞれの値を持つさまざまなインスタンスを返すことができます。
ただし、インターフェイスを使用する主な理由は、よく知られたコントラクトでアセンブリ間でインターフェイスを共有できるためです。これにより、誰かに渡されたときに、インターフェイスICar
について何も知りませんが、インターフェイスがあることはわかりMake
ます。さらに、パブリックインターフェイス以外は実行できません。したがって、名前が付けられMustang
たpublic
メンバーModel
がいる場合、それがインターフェースにない限り、彼らはそれに到達することができませんでした。
はい、できます。
利点は、戻り (および入力) 型を抽象化できることです。
public interface IFruit{ }
public class Apple: IFruit{}
public class Pear: IFruit{}
...
public function IFruit SelectRandomFromBasket(Basket<IFruit> basket){
// this function can return Apple, Pear
}
はい、それは可能です、そしてそれは公共の行事にとって良いことです。
あなたの質問の理由の部分については、他の人の回答をコピーして貼り付けることはしませんので、たとえば、既存の回答を参照してください。
はい、golang の観点からあなたの質問に答えます。戻り値の型としてインターフェイスを使用できます。つまり、int、float、string などの任意のデータ型を返すことができます。
インターフェイス = 任意のデータ型
package main
import (
"fmt"
)
func any (u interface{}) interface{} {
fmt.Printf("Type: %T\n",u)
return u
}
func main(){
fmt.Println("value: ",any(5))
fmt.Println(any("testing"))
}