メソッド アクセス修飾子
引数
最初の前回と同じプログラムは省略。
次のsetTateYokoのプログラムを書きます
using System;
class Rectangle{
public int tate;
public int yoko;
public void show(){
Console.WriteLine("tate:" + tate.ToString() + " yoko:" + yoko.ToString());
}
public void setTateYoko(int t, int y){
tate=t;
yoko=y;
}
}
class Test09{
public static void Main(){
Rectangle ra = new Rectangle();
ra.setTateYoko(30,100);
ra.show();
}
}
void setTateYoko(int t, int y)はtとyという二つの引数でtateとyokoをセットします。
Mainの中でsetTateYoko(30,100)ってやってセットしてます。
voidがついていることに気をつけてください。voidは戻り値がないメソッドのことです。
戻り値
using System;
class Rectangle{
public int tate;
public int yoko;
public void setTateYoko(int t, int y){
tate=t;
yoko=y;
}
public int getArea(){ //メソッドの前にintがついています
int a=tate*yoko; //動画ではaですが長いプログラムaだと不明瞭なのでMenseki等の名前のほうがわかりやすい
return a; //return で戻ってくる変数の型とメソッドの型は一致しないとダメ(この場合はint)
}
}
class Test09{
public static void Main(){
Rectangle ra = new Rectangle();
ra.setTateYoko(30,100);
int area=ra.getArea();
Console.WriteLine("面積は: "+ area.ToString());
}
}
getArea()の、何もないカッコを忘れないでください。
忘れたらコンパイルできません。
何もないなら()ってなんかダサイしわざわざ書かなくていいんじゃね?とか思っても、変数と紛らわしいので
絶対に()をつけてください。何もない()をわざわざつける事で変数ではなくメソッドであることがわかります。
もちろん、戻り値はint以外もできます。宿題のヒントになっちまいますが・・・stringを戻らせる方法
using System;
class MojiTest{
public string aiueo(){
return "あいうえお";
}
}
class MainClass{
static void Main(){
MojiTest a = new MojiTest();
string s = a.aiueo();
Console.WriteLine(s);
}
}
aiueo()であいうえおという文字列がreturnされてsに入ります。
あまり関係ない話ですが、動画のプログラムではgetAreaとかsetTateYokoとか、最初は小文字で次から始まる単語が大文字ですよね。
こういうのを、camel記法といいます。(camel=ラクダ、ラクダのこぶみたいにデコボコな書き方)
C#では基本的に単語は全部大文字で始めるので(例 OnClickやSetStyle)
最初が小文字だと紛らわしいし、C#は大文字と小文字を区別してコンパイルできなくなるのでミスのもとになるので名前のつけたは一貫性を持つようにしよう!
アクセス修飾子
いまのところpublicとprivateだけ覚えておけばおk。
publicはどこからでも使えますがprivateは同じクラス内でしか使うことはできません。
publicは比較的わかりやすいと思うのでprivateだけ。
動画の最初のプログラムは前と同じなので省略。
using System;
class Rectangle{
int tate; //publicもprivateもついていないなら、privateだとみなされます
int yoko;
public void setTateYoko(int t,int y){
tate=t; //tateとyokoはprivateなので別のクラスからはアクセスできないが
yoko=y; //同じクラス(Rectangle)からはアクセス可能!setTateYokoを利用し間接的に代入しています。
}
public int getArea(){
return tate*yoko; //さっきのプログラムと違ってint aを使わず直接returnしてます
}
}
class Test09{
static void Main(){
Rectangle ra = new Rectangle();
ra.setTateYoko(30,100);
int area = ra.getArea();
Console.WriteLine("面積: "+ area);
}
}
同じクラス内ならアクセスできるということを覚えておいてください。
補足、文字列表現と時刻
今回とほとんど関係ないけど覚えておくといいことを説明します。
いままでは
Console.WriteLine("たては" + tate.ToString() + "です。よこは" + yoko.ToString() + "です。");
みたいな表現方法でやってました。この方法だと、"と"の間がどこなのかかなりわかりづらいです。
この程度の短いのならいいですがもっとわかりやすい表現方法にしてみましょう。
int tate=30, yoko=100;
Console.WriteLine("たては{0}です。よこは{1}です", tate, yoko);
これを実行すると、「たては30です。よこは100です」と表示されます。
Console.WriteLineに「三つの引数」があることがわかりますか?
最初の引数は"たては{0}よこは{1}です"ってやつで、第二の引数がtate,第三の引数がyoko。
じつは最初の引数に{0}って書くとそこに第二の引数が文字として表示されます。同様に、{1}って書くと第三引数が表示されます。
いちいち+tate+とか"と"で区切られてるより、こっちのほうが読みやすいです(俺は)
さらにこの{0}ってやつは特殊な方法で文章を表示してくれます。
一例として、現在時刻を表示させましょう。知っとくと便利だと思うので現在時刻を表示させる方法を覚えよう!(時刻表示なんかしねーよって人は読み飛ばそう)
using System;
class ClassMain{
static void Main(){
DateTime dt = new DateTime(); //DateTimeは「時間」の型、DateTime.Nowで「現在時刻」を取得 dtは別の名前でも可能
dt=DateTime.Now; //この二行は、DateTime d = DateTime.Now ってやってもおkです。Nowはメソッドではないので()つけないことに注意
Console.WriteLine("{0:yyyy/MM/dd hh/mm/ss.fff}",dt);
}
}
{0}ではなく0のあとになんかヤバイのがついてます。{0}の0の後に
コロン(:)をつけることにより、特殊表示が可能です。
{0:yyyy/MM/dd hh/mm/ss.fff}について説明
これらのyyyyは今の年(year)、MMは月(month)、ddは日(day)、hhは時間(hour)、mmは分(minute)、ssは秒(second)、fffはミリ秒(fraction)
をあらわします。MonthとMinuteの頭文字が同じなので大文字と小文字で区別してます。
これらを組み合わせると("{0:今日はMM月dd日です}",dt)とか("{0:今はhh時mm分です}",dt)
みたいないろいろな表現が可能です。もっといろいろ表現方法(曜日とか)あるけど、これ以上知りたいならC# DateTimeとかで
ググる。
最終更新:2009年11月23日 19:02