こんばんは。
以下プログラムについて、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]);
}
}
No.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#プログラミング
アマゾンで第二版と第三版のレビューをみたのですが、他の言語を経験されている方には概ね好評ですが、初めてプログラム言語を学ぶ方には不評の様ですね。
猫には難しすぎるようですよ。
No.3ベストアンサー
- 回答日時:
> 猫でもわかるC#プログラミング 2版 p246に書いてあったサンプルとなります。
今の時点では使っていない、意味のないものかもしれません。
参考書を読み進めていくと分かるのでは。
インターフェースを用意するということは、MyClass以外にも同様のインターフェースを実装するクラスを用意していると思いますね。
クラスの呼び出し側では、どんな機能なのかを把握する必要がなく、特定のインターフェースによる機能なら呼び出しを可能にする、という実装をするかと思います。
インターフェースは、ざっくり身近な例で言うと、コンセントです。
コンセントは、利用される家電製品がどんなものかは関係なく電力を供給してくれます。
No.2
- 回答日時:
>インターフェースの実装と記載があり、サンプルがのっています。
ごめんなさい、ちゃんと文章を読んでなかったです
インターフェースのことですか
何に使っているのかというと
簡単に言うにはどうしたらいいか分からないので
https://ufcpp.net/study/csharp/oo_interface.html
ここを参考にしてください
設計図を作っている
と言うといいのかな...?
No.1
- 回答日時:
>この「interface IMyInterface」
>部分はなににつかっているのでしょうか?
多分何にも使ってないよ
オーバーライドの解説用とかでは?
このソースコードが載っているところにはなんと説明が書いてあるのですか?
ご回答ありがとうございます。
猫でもわかるC#プログラミング 2版 p246に書いてあったサンプルとなります。
インターフェースの実装と記載があり、サンプルがのっています。
「インターフェースIMyInterfaceは、仮想メソッドshow、仮想プロパティXPROP 仮想インデクサをメンバとして
もってます。どのメンバにも中身はありません。
MyclassはImyinterfaceを実装メンバがすべてPUBLICになっているいる点に注意してください。と記載されてます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java初級 引数に適用できません
-
public static void main (Stri...
-
レコード件数の表示
-
StringBufferからStringへキャ...
-
VBAで新規ファイル名
-
abstract と static を一緒に付...
-
C# でメソッドに送られてきたOb...
-
不要なstaticメソッドの見分け...
-
Java初心者です、エラーの意味...
-
Google Apps Script で getRang...
-
String.containsの反対機能はあ...
-
親の親のメソッドを呼ぶには?
-
リストボックスの並べ替え (VB...
-
djUnit コンストラクタがpriva...
-
なぜprotected overrideなのか
-
戻り値の異なるメソッドの多重...
-
return new使用時
-
JComponentを継承して処理をJBu...
-
【C#】WebBrowser上で表示され...
-
Javaの初期化メソッドについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Java初級 引数に適用できません
-
public static void main (Stri...
-
レコード件数の表示
-
abstract と static を一緒に付...
-
なぜprotected overrideなのか
-
C# 点の描き方をおしえてくだ...
-
コマンドライン引数のチェック
-
String.containsの反対機能はあ...
-
Google Apps Script で getRang...
-
StringBufferからStringへキャ...
-
Java初心者です、エラーの意味...
-
javaに"search"という関数 or ...
-
C# でメソッドに送られてきたOb...
-
YYYYMMDD書式の日付に対する適...
-
メソッド宣言の戻り値の型にク...
-
return new使用時
-
readLine()ではじめから読み直...
-
シェルスクリプトからのJavaメ...
-
Fileの読み取り専用の解除
-
親の親のメソッドを呼ぶには?
おすすめ情報