ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

C#で未習得な機能を列挙!

私も思えばC#をだいぶ使いこなせるようになったわけですが、
C#の機能でまだ知らないものも、一応あるんですよ。


プロフィールページにも「C#でも未知の領域は少しばかり存在します。」と、書いています。


プロフィール - ブログ「サイバー少年」
http://cyberboy6.blog.fc2.com/blog-entry-2.html


…それで、プロフィールページに書いてあるとおり、知らないものは“少しばかり”だと思っていたんですけどね。

実は調べてみたら結構あったんですよ。

というわけで、今回は私が未習得なC#の機能を、コメントも付けて列挙していきます。


あくまでも、C#言語としての機能ですね。
Threadクラスとか、WPFとか、.NETのライブラリは含めません。


いやぁ、特に、C#3.0以降の構文は訳が分からないものが多いですね。

使いこなせているのは、自動実装プロパティぐらいかな…。

dynamicとか出てきて、「C#は静的型付けだったのに、最近はぶれている」と、批判されているのを見たことがあります。


こういった機能の追加の是非については、もっと詳しい人に任せるとしても、

とりあえず追加されたものは追加されたのですから、C#使いとしては覚えるべきですよね…。


では、列挙を始めていきましょう。





サイバー少年ビックリ仰天!
C#使いだけど知らなかったC#の言語機能一覧ッ!!
 


・クエリ式 (LINQ)

C#の代表的な追加機能です。
データベース操作がそもそも分からないので、程遠いですね…。

ただ、実はクエリ式はSQLだけでなくXMLにも使えるそうです。
これは取っ付きやすい。


・拡張メソッド

これについては、使う機会がないから、いつまでも覚えられないというのが大きいですね。

覚えること自体は簡単そうでした。
ただ、使う機会がない。


・条件演算子、null合体演算子

これらは一々、書くのが面倒な処理の糖衣構文みたいな感じですから、ついつい if文 とかでやってしまいます…。

これを使いこなしたら、少しはスマートなプログラムコードになるんじゃないかな。


・async / await

覚えるとしたらかなり重要度の高い部類ですね。

C#ってマルチスレッド処理に強いみたいですね。
F#のほうがいいって?

必要なのは分かっているのですが、いざ覚えようとすると眠くなってきます。

重要度の高いものほど難易度も高いのか…。


・lockステートメント

大体、分かっているのですが、一部だけ理解が足りない箇所があると思います。

というか、排他制御に対して一部の理解が足りないんですね。


・dynamic (動的型)

WikipediaにC#は「強い静的型付け」って書いていますけど、「(4.0から動的型導入)」って右に書いてありますね。

C#に動的型がある、というのは重大なことですけど、覚えるのは別にいいかな…と。

動的型を使うなら、いっそのこと動的型付け言語でやったほうが良いんじゃないでしょうかね。


・in / out (ジェネリックスの共変性と反変性)

これは結構、学習を優先するべき機能だと思います。

ジェネリックスはよく使いますからね。
共変性と反変性ねぇ。どういうことだろうか。


・yield


私は「イテレータの実装なんて普通やらねえだろ」と、思っているのですが、実装することも多いんですかね…。

学習の優先度は低いですね。


・unsafeコードの各種機能

固定配列とかありますよね。

unsafeコードを書くときが来たなら覚えないといけませんね。

いや、素直にC++とか覚えます…。


・各種プリプロセッサ命令

優先度は中間ぐらいでしょうか。

小規模なものしか作っていないからでしょうけど、あまりデバッグ環境には興味ありませんね。

あと、警告を表示しないやつは使うんですかね…。





もしかしたら、まだあるのかも知れないですが、私が調べたうちでは以上ですね。


しかし、この頃は「覚えなくては」と言ったものの覚えていないことが多いので…。

まぁ、覚えたらラッキーみたいな意気込みでいましょう。

(↑いいのか!?)


あと、列挙していて思ったんですけど、C#ってどうでもいい機能が多いですね…。

機能が豊富でよろしいのかしら。


というわけで、C#を色んな意味で見なおした私でございました~。

tag:

コメント

マルチスレッド

さらっと流し見てきましたがC#ってスレッド楽そうですね
C++でもサクッとマルチスレッド書く方法ないかなぁと思うんですが、継承が面倒(スーパークラスの名前を毎度失念してるの)でいつも調べる前にマルチプロセスに逃げてしまいます…

  • 2013/09/10(火) 07:24:16 |
  • URL |
  • かぼちゃ #S4pvVTuM
  • [ 編集 ]

Re: マルチスレッド

一昔前はThreadクラスを直接、操作しないといけなかったので
スレッドプールとかいう概念を覚える必要があって、面倒だったようですね。

今は、自動でやってくれるTaskクラスが追加されたので、楽ですよ。
(そういえば、デリゲートのBeginInvokeとかどうなったのだろうか…)
最近のC#が一番に力を入れているのが、非同期処理ですね。

ぜひあなたも、今すぐC#をご利用ください!(ジャパネット風に)

かってにオススメを書いておきます。
私も、全部しってるわけではないですが、、、

ロックと、LINQは、抑えておくといいですね。
ロックといえば、一般的なのは、ファイルロックです。
詳しい解説は、下にありますが、同時アクセス時に、
内容が消えないようにする仕組みです。
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%AD%E3%83%83%E3%82%AF
LINQもいいですけど、DB覚えるなら、アクセスをc#で制御する事から
入れば、視覚的には、やさしいですよ。SQLサーバよりとっつき安いです。
http://blog.zaq.ne.jp/bigfield/article/327/

  • 2013/09/11(水) 02:29:40 |
  • URL |
  • 通りすがり #EBUSheBA
  • [ 編集 ]

Re: 通りすがり

あ、ここで書いたロックは、ファイルロックとかじゃなくて
C#のlockステートメントですね。
非同期処理時に排他制御をしてくれる文です。

ただまぁ、排他制御もファイルロックも、似ていますよね。
ロックをしないことによる問題も似ていますし、ロック方法も似ていますし。

Microsoft Accessは持ってないですね…。
OpenOffice.org Baseならありますけども。

データベースを覚えるならOpenOffice.org BaseからGUI操作で、
C#でデータベースにアクセスするならLINQ、と言うふうにしようかなと思っています。

databeaは、何でもいいんで、GUIがあるのとないのとでは
大違いなので、あるものが最初はいいですね。

やってることは、一緒です。
C#から、扱うなら、
型が違うくらいですね。
あとは、SQLの方言くらい。
LINQは、これから、どんどん便利よくなりそうですね。

lockについては、わかってたんですけど、
原理や、考え方は、同じ。
抽象的な処理で、ロックされてるかわからないより、
ファイルだと、形として残るので、わかりやすいかなと。

  • 2013/09/11(水) 22:42:54 |
  • URL |
  • 通りすがり #EBUSheBA
  • [ 編集 ]

OOPLとデータ構造&アルゴリズムの好相性

たしかにデータとふるまいをセットで捉えるという点から見て
抽象データ構造はまさにオブジェクトですね。

ただ例に挙げているsortなんかはアルゴリズムであって、
抽象データがもつふるまいではないので、設計としてアレなような。
C++でも一部、メンバにsortを持つものがありますが
基本的には別々になっています。

  • 2013/09/11(水) 23:24:04 |
  • URL |
  • div9851 #-
  • [ 編集 ]

Re: 通りすがり

GUIのほうが、データベースに専念できる気がしますね。

LINQはすごいみたいですね。
しかし、whereだけのやつを書いてみたんですが、
正直なところ便利とは思えませんでした…。

まぁ、便利だから存在するわけで、そのうち私もこの便利さが分かるんでしょうけどね。

lockは本当にファイルロックと原理や考え方が同じですよね。
私にとって分かりやすさは、メモリのロックもファイルのロックも同じくらいです…。

Re: OOPLとデータ構造&アルゴリズムの好相性

え、私はarray.sortにしたり、必要に応じて
array.bubblesortやquicksortにする(メンバにする)のがよろしいと思っていたのですが…。

C++がこれと違うなら一般にもこれと違うんでしょうね。
C#にArray.Sortがあるもので、てっきりメンバなのかと…。

まぁ、アレな設計とは限らないと思いますよ。
私はメンバにするほうが好きですね。(拡張性に欠ける感じがしますが)

コメントの投稿

トラックバック

トラックバック URL
http://cyberboy6.blog.fc2.com/tb.php/297-939ddb6b
この記事にトラックバックする(FC2ブログユーザー)

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。