ブログ「サイバー少年」

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

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

4月

コンピュータ関連で覚えた技術
・C#のXMLコメントの仕組みを覚えた。(各タグの概要、用途は覚えていない)
・C#で、ジェネリックスの詳しい仕様と使い方について覚えた。
・C#の配列型の仕組み(System.Arrayを継承して作る)を覚えた。
・C#のstaticメンバやメソッドの、メモリ展開方法について知った。
・.NETのアセンブリの仕組みについて考えた。
・Microsoft Small Basicの.NET上での仕組みを調べた。
・スタック、キューの概要と、配列での実装方法を覚えた。
・CPUの性能は主に周波数とIPCで決まることを知った。

コメント
今回から「勉強したこと」の記事も2013年度版です。これからもやっていきますよ。今回も主にC#のネタですが、C#の裏のアセンブリやメモリ上など奥深い所で、何がおこっているのかを知ったものが多いです。

tag:

前に言っていた問題の回避案とC#の属性について

前に記事「Type.IsAssignableFromメソッドが変になる件について考える。」で、
Type.IsAssignableFromメソッドで有効プラグインかどうか判定することは出来ないと判明しました。

なので、一度インスタンス化してisで判断するしかなくガッカリしましたが、

そうとも限らないかも知れないです。

プラグインで使うクラスには属性クラスを設定するようにしたら良いんじゃないでしょうか。

Typeには属性クラスを調べる機能もあった気がします。


まだ作って見ていないので結果はどうなるかわかりませんが。

もしかしたら、あの記事で書いたことと同じ理屈でTypeクラス全般の機能が役に立たないのかも知れない…。

まぁ、今度やってみます。



しかし、属性クラスってなんなのでしょうかね。

実は私、属性クラスについてあまり理解していないんですよ。

[STAThread]とかよく見かけますが。
(STAThreadは属性クラスだけでなくCOMの理解も必要…)

一般的な用途とは少し外れた、特殊な機能?

C#コンパイラや、Aseemblyクラスなどが見る物なのでしょうか。

まぁ、普通のものじゃないですよね。

クラスの機能として使うのではなく、情報として使うというのは、なんとなくわかりますが…。


まぁ、とにかく、プラグインクラスに属性つけて実験してみたいと思います。

tag:

動くじゃないか、Type.IsAssignableメソッド ~ 状況報告 ~

大変です。(大変ではないかな。)

さんざん記事「Type.IsAssignableFromメソッドが変になる件について考える。」で
Type.IsAssignableFromメソッドが正常に動かないと書きましたが、

久しぶりに実験してみたら正常に動いちゃいました…。

ななな、何故だ!?

あの記事で、“Type.IsAssignableFromメソッドが正常に動かない理由”として、さんざん仕組みや理由を考えて書いたのに…。


まぁ、とりあえず出来たというのは確かなので、このやり方に戻そうと思います。

それにしても、なんでちょっと前は出来なかったのかなぁ…。

原因が全く分かりません。


あと、記事「前に言っていた問題の回避案とC#の属性について」で言っていた、

属性クラスを設定して、プラグインクラスかどうか判断する、というやつも問題なく動きました。
続きを読む

tag:

再帰はすげえ…けどループを使え!

超が付くほど久しぶりの記事投稿なため、記事を書く要領を忘れてしまいました(笑)

「なんかいつもと違うな」と感じる部分があるかも知れませんが、ご了承ください…。


以前、記事「再帰すげえ!」で、

ツリー構造を探索するときに、再帰を使えば直感的で分かりやすいプログラムを書ける、再帰すげえ!

というようなことを書きました。

しかし、“いげ太”さんのコメントによると、再帰で使うスタック領域はあまり大きくないそうで、スタックを食い潰してしまうこともあるそうです。

.NET Framework(というかCLR?)はスタックが1MBだそうですね。

ネイティブではないので関数のアドレスが32bitではないかも知れませんが、
32bitと仮定すれば、1MBで262143回の再帰が出来ることになります。

確かに、処理によっては262143回なんて食い潰してしまうでしょう。

しかも、これはローカル変数を一つも宣言しない場合の回数です。


まぁただ、.NETは基本的に配列までもがヒープに作られますから、再帰を使わなければ食い潰すこともないですもんね。

1MBでも余るわけですよ…。
続きを読む

tag:

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