プロが教えるわが家の防犯対策術!

こんばんは。

以下プログラムについて、interface IMyInterface で宣言した内容全てとMyclass部分の「: IMyInterface」部分を記載していなくても実行結果がおなじになるんですが、この「interface IMyInterface」
部分はなににつかっているのでしょうか?

ーーーーーーーーーーーーーーーーー
// interface01.cs

using System;

interface IMyInterface
{
void show(string str);
int xprop
{
get;
set;
}
int this[int i]
{
get;
set;
}
}

class MyClass : IMyInterface
{
protected int i;
int[] arr = new int[10];


public void show(string str)
{
Console.WriteLine(str);
}
public int xprop
{
get
{
return i;
}
set
{
i = value;
}
}
public int this[int index]
{
get
{
return arr[index];
}
set
{
arr[index] = value;
}
}

}

class interface01
{
public static void Main()
{
MyClass mc = new MyClass();
mc.show("Test Interface");
mc.xprop = 100;
Console.WriteLine("mc.xprop = {0}", mc.xprop);
for (int i = 0; i < 10; i++)
mc[i] = i * 2;
for (int i = 0; i < 10; i++)
Console.WriteLine("mc[{0}] = {1}", i, mc[i]);

}
}

A 回答 (4件)

> この「interface IMyInterface」部分はなににつかっているのでしょうか?



インターフェースを継承しているということは、そのインターフェースで定義されているメソッドなりプロパティなりを必ず持っているということです。

class MyClass : IMyInterface

としているなら、
MyClassを定義する際にshowメソッドやxpropプロパティ等を必ず定義しなくてはいけないということです。
また、そのクラスを使用する側(サンプルでは、class interface01)にとってはMyClassのインスタンスにはshowメソッドやxpropプロパティ等があるということを保証するものです。



試しに、class MyClass : IMyInterface のまま

class MyClass と class interface01 からshowメソッドの定義や記述を削除してコンパイルしてみて下さい。
エラーになると思いますよ。



>「: IMyInterface」部分を記載していなくても実行結果がおなじになる

ですから、継承しない場合は、MyClassを定義する際にshowメソッドやxpropプロパティ等を定義しなくてもエラーなりません。




というようなことを、しっかり説明してあるのが、良い入門書だと思うのですが……


> 猫でもわかるC#プログラミング

アマゾンで第二版と第三版のレビューをみたのですが、他の言語を経験されている方には概ね好評ですが、初めてプログラム言語を学ぶ方には不評の様ですね。
猫には難しすぎるようですよ。
    • good
    • 0

> 猫でもわかるC#プログラミング 2版 p246に書いてあったサンプルとなります。


今の時点では使っていない、意味のないものかもしれません。
参考書を読み進めていくと分かるのでは。

インターフェースを用意するということは、MyClass以外にも同様のインターフェースを実装するクラスを用意していると思いますね。
クラスの呼び出し側では、どんな機能なのかを把握する必要がなく、特定のインターフェースによる機能なら呼び出しを可能にする、という実装をするかと思います。

インターフェースは、ざっくり身近な例で言うと、コンセントです。
コンセントは、利用される家電製品がどんなものかは関係なく電力を供給してくれます。
    • good
    • 0
この回答へのお礼

いつもありがとうございます。

お礼日時:2019/02/26 20:57

>インターフェースの実装と記載があり、サンプルがのっています。


ごめんなさい、ちゃんと文章を読んでなかったです
インターフェースのことですか

何に使っているのかというと
簡単に言うにはどうしたらいいか分からないので
https://ufcpp.net/study/csharp/oo_interface.html
ここを参考にしてください

設計図を作っている
と言うといいのかな...?
    • good
    • 0
この回答へのお礼

URLのご案内ありがとうございました。

お礼日時:2019/02/22 12:40

>この「interface IMyInterface」


>部分はなににつかっているのでしょうか?
多分何にも使ってないよ
オーバーライドの解説用とかでは?

このソースコードが載っているところにはなんと説明が書いてあるのですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
猫でもわかるC#プログラミング 2版 p246に書いてあったサンプルとなります。
インターフェースの実装と記載があり、サンプルがのっています。
「インターフェースIMyInterfaceは、仮想メソッドshow、仮想プロパティXPROP 仮想インデクサをメンバとして
もってます。どのメンバにも中身はありません。
MyclassはImyinterfaceを実装メンバがすべてPUBLICになっているいる点に注意してください。と記載されてます。

お礼日時:2019/02/18 10:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!