C#を通じてオブジェクト指向をマスターしようとする気長な講座
更新:12/07/01 | C#徹底講座 | DOS/V
関連記事一覧
C#徹底講座とは?
C#(しーしゃーぷ)とは、この連載では基本的にMicrosoft社の.Net開発環境の一つである「C#」を指します。
C#はJava、Basic、C++の良いところを集めてまとめた集大成とも言える優れた言語(開発環境)です。 この徹底講座では、私がC#を学習するのにあわせて有用な情報などをまとめておくために設けたものです。つまり、基本的には自分のためのC#日記のようなものです。
本ページは著者自らの理解と備忘録のために書いた物のため、嘘(故意ではないですが)や間違いが多く含まれている可能性が多分にあります。 実際にかなり適当に書き進めていますので、頻繁に内容が予告も告知もなしに修正されますが、どうぞ、ご容赦下さいませ。
ちなみに、筆者である私のプログラミング技術レベルはVB6やObjective-CやRuby(OnRails)でフリーソフト、シェアウェアを幾つか作成したことがある程度のレベルでC#については机上の知識が少しある程度です。
ですから、プログラミングに関して全くの初心者の方には読み進めづらいかもしれません。VBでのプログラミング経験がある人であれば、読み進められる程度の内容になっているはずです。
基本から応用までを段階的に押さえられるように改訂していく予定ですので、かなりの初心者にも読める内容にはなっていくと期待されます。
最終目標は次の通りです。
- アンセーフなコードまで理解する
(例えば、敢えてポインタを使ったプログラムなど) - スレッドプログラミング
(同時に複数のプログラムが平行して動作する仕組みを利用する) - C#のデリゲートについて理解する
- オブジェクト指向に関する一つの完成された理解(あっているか間違っているかは別として納得できる状態)
はじめに
まず、連載「改訂版 C#入門」が良くまとまっていて、全体を把握するにはもってこいの記事だと思われます。
ちょっと情報が少なく、初めて読む人間には難しく感じるのですが、とりあえず一通り読んでおくと良いと思います。
おそらく、『オブジェクト指向って何?Javaなんて難しくて…』という状態に人には、連載を読んでもあまり情報が頭に残らないかもしれませんが、気にすることは全くありません。何となくキーワードに慣れることがまずは重要なのです。
今使っている言語がある場合、わざわざC#を学習する理由があるのだろうか?と考えるかもしれません。必要性や興味がないと新しい情報の吸収性は悪くなりますので、まずはC#や.Net Frameworkのメリットを実感することが重要です。
-
C#のメリット
C#はVBやC++と肩を並べる位置づけになります。VBであればGUI系のアプリケーションを効率よく作成できたり、C++であればWindowsAPIをフル活用した高機能なコンポーネントを作成できたりと、それぞれの言語には用途やメリット、特長というものがあります。
Javaと比較した場合のC#のメリットについては、下記ページがJavaとC#の両方の特長を知ることができるため参考になります。
私がJavaからC#に乗り換えた10の理由」簡単にまとめると次の通りです。
- struct
- delegate
- property
- custom attribute
- thread
- interface
- virtualとoverride
- #if
- Visual Studio .NET
- Javaが嫌になった
ちょっと強引な部分もあるのかもしれませんが、的を射た部分も多分にあります。1〜8に関しては、特に後々大きなポイントとなります。もちろん、他にも色々とメリットがあるので、追々情報を追加します。
ここでは、まだそれぞれがどんな機能や特長なのかはわからなくても大丈夫です。
見る人が見ても、他の言語と比較して少なくとも10〜数十のメリットがある、と思ってかまわないという感覚が重要です。全てを納得しなくても、とりあえず十分青そうな隣の芝生に乗り込んでいってみようという気持ちがここでは重要です。
Cと言えば、C++の方が良いのでは?(実行速度について)
C++と比較した場合、.Net Frameworkの性格上、C#とC++(VBなども)の間において実行速度はほとんど差がなくなります。
もはや、一部のハードウェア固有のドライバを作成するといった用途以外では、C++である必要はないのです。
メモリ管理から解放され、ポインタ地獄から解放され、Javaで届かなかった痒いところに手が届く…とくれば、C#を選択しない手はないと思います。
難しいながらも効率化と簡単化を追求した現時点での集大成と考えて良いのではないでしょうか。C#を習得した後で、必要に応じてC++、場合によってはJavaを物色してみるという方法は悪くありません。
-
.Netのメリット
ここで言う.Netは正確には「.Net Framework」と呼ばれるMicrosoft社独自のアプリケーションプラットフォームです。.Netとは、単純にいうと正確にはMicrosoft社の分散ソフトウェア環境という、新世代プラットフォーム計画を指すようです。
C# → 機械語 ではなくて、C# → 中間言語 → 機械語とクッションをおくことで様々なメリットがあります。
正確には次のような構造になっています。C#のソースコード (コンパイル)→ IL(Intermediate Language)と呼ばれる中間コード → CLR(Common Language Runtime) → マシン語
もちろん、こうした中間言語を利用する構造のデメリットとして実行速度の低下が考えられますが、昨今のコンピュータ事情をみれば実行速度はアプリケーション開発にとって大きなボトルネックとなることはほとんどなくなりました。
.Net Frameworkの主なメリットは、次のようなポイントです。
- 複数の言語を横断的に利用できる
- 膨大なクラスライブラリを利用可能
- どんな言語からも共通のクラスライブラリを利用できる
(利用方法が統一されている)
オブジェクト指向の心得
C#はオブジェクト指向言語と言われる開発言語です。本屋に行けばやれオブジェクト指向はうんぬんかんぬんと、先を争うように目に飛び込んでくるキーワードです。
しかし、C#もオブジェクト指向言語である以上、やはり「オブジェクト言語」ならではの性格や考え方に則したコーディングを行う必要があります。というよりも、そうするように作られているので自然と従わざるを得ないのです。
避けては通れない道であり、積極的に体得することで生産性は向上すると考えて良いと思います。
オブジェクト指向のオブジェクトとは何でしょうか?
部屋に飾るオブジェを思い浮かべてみると、漠然と「物」であることが想像されます。(あまり良い例えではなかったですね)
飾り物ですから決まりはありません、色々な形や色をしていますし値段も様々です。しかし、「物」ありきのオブジェです。
つまり、オブジェクト指向とは「何か物」を中心としてプログラムが作られていく構造を指します。
この物を単位にしてデータやプログラムを一塊にしていきます。
当然、この「物」という考え方は物理的な物だけを指すわけではありません。人間が細胞の固まりであるように、割り切りやすい一つの固まりを指しますから、考え方や思想・物語でも良いわけです。
例えば、「家」というオブジェクトを想定した場合、情報として「色」「階数」「窓の数」「玄関の向き」など様々な要素が考えられます。
これらの静的な要素(特定の値)をC#ではフィールド、プロパティと呼んでいます。
更に、情報に加えてもう一つ、動きのある要素も加える必要があります。
例えば、「ピンポン(呼び鈴)を押す」「蛇口をひねる」「ドアノブを引く」といった要素です。これらの動的な要素(特定の動作=プログラム)をC#ではメソッドと呼んでいます。
この、フィールドとメソッドという要素で、オブジェクトを彩っていくことで、自然とオブジェクト同士の結びつきが生まれ自然な流れでプログラムが構築されていく絵姿を描くことができるのです。
そのため、プログラミング能力とはちょっと違った物事をオブジェクトに置き換えて考えられる力が必要となります。
一つの事象に対して、どんなオブジェクトを想定したらいいのか、どんなフィールドやメソッドを実装(実際に動作するように具体化すること)したらいいのかというセンスが問われるわけです。
オブジェクト指向のメリット
何故オブジェクト指向なのか? この点をはっきりしないと、オブジェクト指向な考え方を修練する気になりません。
オブジェクト指向では、プログラムは流れると言うよりも自然発生的に実行されていきます。何を言っているかというと、より自然界に近い状態でプログラムを実装できる、また、より簡単に複雑な世界を再現できるという特長があるのです。
物語としてプログラムを書いてしまうと、登場人物の性格や特長が変わるたびにプログラマーは物語自体も変えなくてはなりません。『金太郎が女だったら……きっとこんな風なストーリーに変わっていただろう』といったイメージです。
ところが、オブジェクト指向ではストーリーはなるべく考えないようにします。まずは登場人物=オブジェクトの特長を観察し定義し、反応やリアクションをプログラミングしていきます。
熊やうさぎ、もろもろの登場人物を記述し終わったら、ぽんと金太郎の背中を押してやるだけです。後は、オブジェクト同士がその特長に従ってストーリーを展開していくわけです。この時展開されるストーリーは、わざわざ緻密に物語をプログラミングしなくても、正しくオブジェクトがプログラミングされていれば予定通りのストーリーになるはずです。
さて、金太郎の性別が女に変更されたらどうするのでしょうか?
そうです、金太郎というオブジェクトの特徴だけを変えればいいのです。すると、同じ金太郎でも反応も違えば見かけも違うため、自然とストーリーはそれなりに変化をもたらされるわけです。
-
クラス
確かに英語で書くとClassなのですが、オブジェクト指向における塊の設計図をクラスと呼んでいます。
設計図がなんで必要なのか?実は、クラスという設計図に対して実物をインスタンスと呼んでいます。
物事には計画と実行、予算と経費、夢と現実、設計図と実体という具合に分かれていた方が便利で分かりやすく、自然であるということです。
「今度の夏休みには島に行きたいね」、「島だったらハワイが良いね」、「ハワイも良いけど、今回はホテルをグレードアップしようよ」、「よしじゃあ決まり!」となって初めて準備が完了し予約を入れたりチケットを購入できるわけです。取りあえずハワイに行って、行き当たりばったりで物事を進めることは得策とは言えないのです。プログラミングも同様で、プログラムの進行に実体は必要不可欠ですが、実体を作る前の準備の方が実はもっと重要なのです。特に後述するオーバーライドやオーバーロードといったクラスに対して行う様々な行為を考えると、設計段階で行っておくべき事はたくさんあることが分かります。
クラスで語られる物
クラスにはクラスメイトがいます。C#ではクラスメイトをメンバと呼んでいます。
メンバには性質によって次のようなものがあります。
- データ
- 関数
- 型
これらは、クラスの中に好きなようにちりばめて、設計図を作ることが出来ます。
データはイメージしやすいと思います、3とか5といった数字や、文字列などの目に見える実体です。
関数はそれ自体がプログラムで実装された塊で、それぞれに目的を持ったプログラムです。
型は何でしょうか。型はデータや関数を組み合わせた一つの塊です。クラスになりうる塊と考えられます。つまり、クラスはクラスを入れ子状態で内包することが出来ます。このように複数のクラスを一つのクラスに集約することを、正に集約と呼びます。
-
インスタンス
クラスという設計図を実体化させた物がインスタンスです。一つのクラスからはいくつものインスタンスを作ることが出来ます。車の設計図があれば、何台でも同じ車を生産することが出来るわけです。
車を走らせてレースをさせるゲームをC#で作るとしたら、車というクラスを作ってレースに参加する車の数だけインスタンスを生成することになるでしょう。
インスタンスはそれぞれ個別のデータを持つことが出来るので、勝手に走ってもらうことが出来ます。
但し、『色は変えられてもタイヤの数は4つです。』『エンジンの回転数は常に変わるかもしれませんが、エンジンの数は1つです。』といった車の特徴を設計しているのがクラスなのです。後から、「でも、エンジンは2つでもいいんでない?」というリクエストには、次の継承という考え方で対応します。
-
継承、オーバーライド
先に金太郎を例に出してオブジェクト指向のメリットを書きましたが、オブジェクト指向においては、作者は金太郎を再利用することが容易に出来ます。
オブジェクト指向ではない言語を利用している場合、 ストーリーの流用というのはなかなか大変でした。サブルーチンという形でストーリーを細切れにして後でくっつけて再利用するわけですが、話のつじつまが合わなかったりちょっと違うストーリーにしようとすると結構な修正が入りました。
しかし、オブジェクトはストーリーによって変化する物ではありません。金太郎は桃太郎の世界に行っても突然変異を起こすことはなく、当然、金太郎として振る舞います。
そのため、適材適所でオブジェクトを再利用していけば効率よく新しいストーリーを作り出すことが出来るわけです。これが、オブジェクト指向の生産性を向上させる一つの要因になっているわけです。
しかも、オブジェクトはストーリーよりもずっと具体的な内容のため、髪の毛の色だけ金髪にして金太郎を登場させたいなどの要望に簡単に応えられます。これが継承(オーバーライド)と呼ばれる行為です。
このとき、継承される元のクラスを基本クラス、スーパークラスと呼び、継承して作られる新しいクラスを派生クラス、サブクラスと呼びます。そして、全てのクラスの基本クラスをたどっていくとObjectと命名されたクラスの親玉に行き当たります。つまり、C#に存在する全てのクラスはObjectの血を脈々と受け継いだ派生クラスともいえるのです。
-
オーバーロード
似たような用語にオーバーロードという言葉があります。最初はややこしいかもしれませんが、きっちり慣れておきましょう。
オーバーライドは継承、つまり似たような物を作り出す時に既にある物を再利用するための手法でした。
オーバーロードは似たようなメソッドだが引数が異なる場合に簡潔に定義する手法です。家の呼び鈴を例にとると、『呼び鈴が押された場合は取りあえず様子を見るだけ』『のぞき穴で呼び鈴を押した人が見えている場合には人となりを見て対応を判断する』といった具合に、同じ呼び鈴を押すという行為に対しても、得られている情報によって対応(=プログラム)が違うことがあります。
こんな時には、情報の数や性質によって同じ呼び鈴を押すという行為に異なるプログラムを記述することが出来るのです。これがオーバーロードと呼ばれる行為です。
サンプルコード Hello World!
まずは、サンプルコードHello World!を見てみましょう。
Hello World!とは、C#の世界へようこそ!という意味を込めて、「Hello World!」と表示するだけのプログラムの事で、どんな言語でもまずはここから始めるというのが伝統となっています。
さて、このコードにはそれなりにC#のポイントがちりばめられています。
- using
- useは「使う」ですから、usingは「使ってる」です。using 〜とすると、〜を使ってますよという宣言になります。
- この宣言をすることで、〜に含まれるクラスライブラリを優先的に検索してくれるようになります。
- クラスライブラリや自分で作ったネームスペースには同じ名前のクラスなどが含まれる可能性があります。そんなときに、Aというネームスペースに含まれるClass1というクラスと、Bというネームスペースに含まれるClass1が存在していても、 using Aと宣言しておくことで、Class1という記述はAのClass1だなと勝手に判断してくれるようになるわけです。
- このように、ネームスペースという考え方によって同名のクラスなどが存在していても、ネームスペースを分けて区別できるようになっています。
sですから、自分でオリジナルなネームスペース名さえつけてあげれば、その中で自由にクラス名を命名しても他のネームスペース内のクラス名と重複する危険性を考慮する必要はなくなります。 - namespace
- 早速、その下にnamespaceというキーワードが登場します。
- このnamespace AAA{〜} と、括弧で囲まれた中身は、全てネームスペース名AAAの配下にあると定義づけられます。
- ここでは、 ConsoleApplicationなどという適当なネーミングになっていますが、現実にはもう少し気の利いた名前にしてあげたいところですね。
- コメント
- 緑色になっている部分はコメントです。プログラムとしては認識されません。
- 基本的に『//』や『/*〜*/』といったキーワードによってコメントは表現されますが、『///』となっているのはコメントにも種類があって、『/』の数によって後から再利用するときの区別をしているのです。
- [STAThread]
- Threadとはスレッドのことで、スレッドとはプログラムの動作単位です。
- マルチスレッドとは、一つのプログラムだが、複数の処理を平行して走らせられる仕組みです。詳細は、別途ご紹介します。今はあまり気にしなくて良いと思います。
- static void Main(string[] args)
- プログラムは起動時にどこから処理を開始するかを決めておかなくてはなりません。それが正にこのMainというクラスです。しかし、ただのMainではありません、色々と情報が付加されています。
- staticとは静的という意味の修飾子で、staticがついたメンバを静的メンバと言います。C#ではインスタンスを生成しなくても、設計図のままいきなり呼び出して利用できますという宣言とみなされます。
- 静的メンバに対して、インスタンスを生成しないと使えないメンバをインスタンスメンバと言います。このほかにも色々と修飾子が存在していて、メンバの役割を宣言するのに役立っています。
- オブジェクト指向では設計図と実体がつきもの…とはいえ、必ず設計図(クラス)→実体(インスタンス)という順を追わなくてはならないわけではないのです。利便性を考えて、インスタンスを作らなくても良い場合も想定されているのです。
- 但し、注意しなくてはいけない点としてインスタンスを作らないが故に呼び出し手がいくら多く存在していたとしても、呼び出されるクラスは設計図にかかれているただ一つのクラス(同一の物)という事です。
- インスタンスでは、一度作成された実体は個々に固有のプロパティなどを保持・維持できますが、static宣言されたクラスやプロパティは常に単一の物なのです。
- voidは、戻り値がないことを指しています。戻り値とは、呼び出されて一通りの処理を行った結果を呼び出してに伝えることを言います。
- (string[] args)は引数です。このMainというクラス、つまりこのプログラム自体に引数が渡された場合にstring型の変数argsとして受け取りますと言うことを宣言しています。
- Console.WriteLine("Hello World!");
- この一行がこのプログラムの唯一の処理の実体となります。
- Console(コンソール)にHello World!と表示しなさいという命令になります。
- Console.WriteLineと「.」でくっついていますが、このピリオドによってConsoleに属しているWriteLineという意味になります。
- Consoleもオブジェクトの一つですから、様々なメンバを保持しているはずです。その中の一つであるWriteLineを呼び出しているのです。
- 括弧で"Hello World!"がWriteLineに引き渡されていることから、WriteLineというメンバはプロパティではなく、メソッド(何かを受け取って処理を行うプログラム)であることが分かります。
VisualStudioのアシスト機能
- 補完機能
-
C#には色々なクラスライブラリが用意されているし、それらはオーバーライドやオーバーロードして再利用しなくてはなりません。当然、オーバーロードすれば引数によって同じクラスでも振る舞いが変わるわけで、一筋縄では必要なクラスライブラリやその使い方を把握できそうにありません。それ以外にも、クラスには様々なメソッド、プロパティ、フィールドが存在しているはずです。これらをいちいち調べながらプログラミングを進めるのは骨の折れる作業です。
そんなときに役に立ってくれるのがVisualStudioそのものです。実際にコンソールアプリケーションを作成してみましょう。
「Console.」と、Consoleの後にピリオドを入力すると、自動的にConsoleのメンバが表示されます。これで、Consoleにどんなメンバが存在しているのかが一目瞭然です。英語の意味が分かれば何となく機能も想像できます。
また、何かを指さしているのはフィールド、箱が飛んでいくアイコンはメソッドとなっています。
更に、それぞれのメンバにカーソルを当てるとバルーンヘルプに使い方や機能、特徴、引数などが簡潔に表示されます。
WriteLineというメンバの場合、void修飾子によって戻り値がないメソッドであることが分かります。括弧内を見ると大体の引数が分かります。実査にはオーバーロードされているため引数の取り方は色々変化します。
そして、これらのオーバーロードは表示されている用法以外に更に18種類、合計19種類に及んでいることも分かります。
この1行ヘルプが強力で、人のソースを呼んだり自分で機能を探したりする際に大変役立ちます。従来のVisualStudioでは与れなかった恩恵です。
ここで、WriteLineに決めてTabを入力すると確定されます。
そして括弧を入力したとたんに今度はオーバーロードの用法がバルーンヘルプで表示されます。全段と同様にカーソルで19種類のオーバーロードをそれぞれ見ながらどういった使い方をするのかを参照できます。
更に細かい内容については、WriteLineを選択した状態でF1キーを押せばヘルプを参照できます。
更に、一番最初のプログラム全体を見ると、Console.WriteLine("Hello World!")の後に赤い波線が入っているのが分かります。
『ここに何か足りないのでは?』という指摘なのです。これを見逃さなければシンタックスエラーはかなり削減できるでしょう。ここでは、C言語系ではおなじみのセミコロンが抜けていることを指摘しているのです。
- 参照と定義
-
参照とはそもそも、あるクラスの中で、他のクラスのインスタンスを生成したりする際に「他のクラス」を「参照」するというイメージで利用される言葉です。例えば、Aというクラスの中でBというクラスのインスタンスを生成する際には、Bという名前こそ登場しますがその内容は図りしれません。
Public B newinstance = New B;そこで、「Bって何だよ〜」という気持ちは常に沸いてくるのです。そんな場合に便利なのが「参照」と「定義」です。実は、VBなどではVisualStudio6の時代には定義は存在していました。
ここでは「B」を選択した状態で右クリックをすると、コンテキストメニューが表示されます。
その中の「定義」を選択することでクラスBを定義しているプログラムにジャンプすることが出来るというものです。今度は、逆にクラスBの定義を見ていて、「一体、どこからこのクラスBは参照(利用)されているんだろう?」と考えることがあります。そんなときに便利なのが「参照」コマンドです。
コンテキストメニュー下方に、「定義へ移動」と「参照へジャンプ」があるのが分かります。
クラスのアクセシビリティ
アクセシビリティとは、「アクセスの仕方、出来方」を示すもので作成されたクラスがどこからでも参照できてしまっては困る場合がありますし、また、参照の仕方にもルールというものが若干あるのです。
重要機能
デリゲート
.NetではC#以外にもVB.Netでこのデリゲートという考え方が導入されています。そもそもデリゲートとは、Delegateという一つの型になっています。Delegateを辞書で引いても載っていません。デリバリーゲートの略なのでしょうか? 兎に角、Gateの名の通り通り道的な意味合いがある気がします。
このゲートは現在と未来をつなぐために利用されます。『現在=あるオブジェクトを作った 』『未来=あるオブジェクトから呼び出されるメソッドが存在する』と考えられます。
つまり、現在作っているオブジェクトには、呼び出したいけれども、まだ存在しない(どんな名前になるか決まっていない)メソッドが存在するシチュエーションが現実には少なからずあるということです。
そんなシチュエーションは頻繁にはお目に掛からないわけですが、想像もつきづらいですね。一番身近なのはライブラリとして提供されるオブジェクト、例えばフォームに貼り付けるボタンなどのイベント処理です。
ボタンは汎用的なもので、必要に応じて勝手に作成・利用されます。しかし、ボタンというものはわざわざボタンの親玉たるスーパークラスから継承したり、毎回インスタンスを起こして利用するたぐいの物ではありません。フォームにButtonという名前のボタンを貼り付けたら、そのときからButton_Clickというメソッドを利用できるようになるのです。そのため、ボタンという汎用的なオブジェクトを作成する時点では、利用シーンによって幾つ使われるか、どんな名前で使われるか分からないためクリックされた時にどんな名前のメソッドを呼び出せばいいのか分からないわけです。
そこで、分からないものは分からないなりに適当にあしらっておくためにデリゲートは存在します。デリゲートというゲートに放り投げておけば、実行時にもなればちゃんと受け止めてくれる相手をデリゲートを通じて処理してくれるという仲介役になっているのです。
ポイントは、今作っているオブジェクトが未知の何かを呼び出さなくてはならない事があるという点です。そのため、利用されるシーンはイベントを伴うオブジェクトの定義などに主に利用されます。ゴミ袋はゴミ袋以外の用途にも利用できますが、雨合羽に使う人はまずいませんし、やっぱりゴミ袋として使われることが多いように(?)、デリゲートもイベント処理に専ら利用されている…という現状があるようです。
関連記事一覧
- お勧めリンク
- ダウンロード
- ストリーミング関連
- Macintosh関連
-
- Macでも使えるDVDドライブ
- Leopard詳解
- iLife詳解
- Macの修復方法特集
- Apple MacBook (Pro)
- Macで無線LAN802.11n
- 新旧MacBookベンチマーク
- フルHD編集Apple iMovie&Final Cut Express
- ROXIO Toast Platinum
- フルHD編集Apple Final Cut X
- MacBookのHDD換装方法
- MacとWindowsのファイル共有
- MacでWindowsを遠隔操作
- WinユーザーのためのMac概論
- 無料の辞書検索ツール 英辞郎
- 代表的なタブブラウザの比較
- Macお勧めのフリーソフト紹介
- 無料のOffice環境 NeoOffice
- エミュレータ比較
- Macで最適バックアップ
- iGeek Indelible
- intego PersonalBackup
- EMC® Retrospect® for Mac
- Mac版 ウイルス対策
- Ruby On Rails インストール(Mac編)
- Ruby On Rails 開発の初歩(Model)
- Ruby On Rails 開発環境RadRails
- Ruby On Rails DBメンテナンス
- Excel, Wordを使ってMacで年賀状宛名印刷
- Windows関連
-
- EaseUS Todo Backupで完璧バックアップ
- DVD, Blu-rayリッピングツール AnyDVD HD
- キャプチャーソフト hunuaaCap
- Windows2003でリモートデスクトップ7を動かす
- 最適なバックアップソフトは
- robocopyによるバックアップ
- リージョンフリー
- リージョンフリー化を有効活用
- マルチブート
- Antivir®
- eTrust Antivirus
- AVG AntiVirus
- C#徹底講座
- メーラー Mailer
- VBA徹底活用術
- JustSystemメーラーShuriken
- FTPソフトとコマンドライン解説
- DOS/Vパーツリンク集
- Oracle10gBronze試験対策
- CDからMP3へ簡単に変換する方法
- メディアなど
- ハードウェア
-
- iPhone 3G
- iPhone 4
- iPod+iTunes
- iPhone SDK
- 色域(AdobeRGB)
- hp mini 1000
- 環境紹介
- KDDI au新旧プラン研究
- DVDをMP4にコンバート
- 無線LAN環境802.11n
- キャプチャボード
- HD-LANによるネットワークストレージ構築
- NEC LavieJ LJ500/5A
- LavieJ HDD換装
- LavieJ 調子の悪いHDDの復旧
- LavieJ 無線LANモジュールの換装
- LavieJ メモリの追加
- LavieJ バックアップ作成と復元
- Intel PRO/Wireless 2200BG
- 液晶・プラズマテレビ比較
- プリンタ(hp PSC2550)
- 万能リモコン クロッサム
- 婦人体温計 プチソフィア
- 婦人体温計 マドンナ
- ソフトウェア/サービス/開発SDK
- デジタル一眼レフカメラ
- テクニカル記事
- 趣味関連
- ゲーム 〜楽しいゲームの紹介や攻略法
- RoverMNI(ローバーミニ)
- 雑記
- その他
-
- ネットバンキングに便利な金融機関
- 便利なサイト翻訳機能
- 便利ツール GMail
- 無料電話Gizmoの嘘とほんと
- リンク:一般ページへのリンク集
- 相互リンク:相互リンク募集中!
- 本ページの統計:本サイトの統計データ公開
- コメント・フィードバック