質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.34%

  • C#

    4765questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.Net Framework 既存の名前空間い定義されたメソッドについて

解決済

回答 2

投稿 2017/11/30 01:28

  • 評価
  • クリップ 0
  • VIEW 76

BitCoin

score 35

linqなど既存のマイクロソフトなどが作った既存の関数についていくつか疑問があります。例えば↓のコード

var list = List<string>{

"tokyo", "hiroshima","osaka"

}
var exists = list.Exists(s => s[0] == 'A');
Console.WriteLiner(exists);


これですが、listから先頭の文字がAで始まる文字列を探しなかった場合はfalseを返すのですがこのExistsメソッドはまずlistにあるstring型の配列をすべて抽出し、抽出したstringをPredicate<t>にデリゲードで渡した引数sにそのsの先頭文字Aと合致するものを取り出すと推測しました。


しかし毎回マイクロソフト側が定義しためそっどを理解することは困難だと思います。
このあらかじめ用意されているlinqやSystemといった名前空間にあるメソッドの中身を見ることはできないのでしょうか?
また、このようなメソッドはすでにバイナリ化?されていると聞きましたがそれを解読する方法などあるのでしょうか?
またstrng型のs = "aaa"でs[0]はcharの'a'が帰ってくるのはなぜなのでしょう?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

毎回マイクロソフト側が定義しためそっどを理解することは困難

大多数のプログラマーは「プログラム全体を自前で書くことなどない」ので何かしら他人が書いたライブラリーを使います。それを理解するためにリファレンスやドキュメントがありますし、実装の詳細をみることができなくても、ある程度アルゴリズムの勉強をしていれば「おそらくこう実装されているだろう」あるいは「少なくともこういう性質であるはずだ」というのは予測できることが多いと思います。そうでなければ一々中身を見なければならないことになり、さすがにそんなことはやってられません・・・

メソッドの中身を見ることはできないのでしょうか?

たまにデバッグ目的で見たいことがあります。Visual Studioのオプション設定で.NETのソースもデバッグ対象にできますし、ソースがなくてもIL(か機械語だったかは忘れましたが)を見ることはできたと思います。「visual studio デバッグ .net ソース」で検索すると具体的な方法の解説ページにヒットすると思います。しかしながら全てのコードが見えるわけでもなさそうです。

バイナリ化?されていると聞きましたがそれを解読する方法などあるのでしょうか?

上に述べた通りオプション設定によってIL or 機械語を見ることができたと思います(自分は普段やらないので詳しくはないです)。効率などを気にする場合、自分のソースコードをコンパイルした結果を見ることはあります。また逆アセンブラーを使うとオブジェクトファイルの一部(特定の関数)を調べることもできたと思いますが自分はそこまでやったことがないです。機械語やILは大変読みづらいのでそれを読む努力をするなら、もっと他の点を工夫しり学んだ方がよいと思います。(アセンブリー言語の基礎的な知識程度はあっても悪くない気はしますが。)

string型のs = "aaa"でs[0]はcharの'a'が帰ってくるのはなぜ

stringは文字(char)の列と考えるのが自然だからだと思います。Javaなどもそうですね。しかしJavascriptやPythonなど他の言語では単なる長さ1の文字列なのでこのあたりは「言語の特性」として「そういうものだ」ぐらいに考えてもよいと思います。


補足:上記で機械語と言っている箇所は「アセンブリー言語」も含めていっているつもりです。いわゆる機械語は数字の羅列なので普通の人は読めない気がします・・・

投稿 2017/11/30 03:36

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

.NET Frameworkのソースコードを見るには下のサイトを参照してください。
http://referencesource.microsoft.com/
例のExistsの場合はSystem.Collection.Generic.List<T>.Existsです。

そして、すでにbinary化されたコードでもDecompilerを使用すればソースを見ることができます。
もちろんこの場合はコンパイルした時のソースではないですが、大体の働きは推定できます。
JetBrain社のDotPeekを推薦します。

3番目の質問はKSwordOfHasteさんがよく説明しましたので省略します。

投稿 2017/11/30 08:20

編集 2017/11/30 08:38

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.34%

関連した質問

  • 解決済

    C#でCSVファイルを二次元配列に格納したい

    こんにちは。 タイトルのとおりですが、C#にて、読み込んだCSVファイルを2次元配列としたいです。 pythonではlist.append()に配列をループで渡していけば2

  • 解決済

    Asp.Net MVC ViewからControllerへの値受け渡し

    前提・実現したいこと ここに質問したいことを詳細に書いてください 初めてご質問させて頂きます。初心者ですので、基礎的な質問となってしまうかもしれませんが、お力を頂きたいです

  • 解決済

    C# リストからの値の取り方について

    C# リストからの値の取り方について class Sample { public string No; public string Name; } このようなクラス

  • 解決済

    Listを使って出力した乱数を奇偶にわけたいです

    某サイトのコレクションに関する問題で躓いています。 問題の条件として Listg型の可変長配列を生成し乱数を奇偶判別し格納するというメソッドを作りなさいと のことなのですが

  • 解決済

    C# 独自クラスを使ったListから、一つの要素だけ抽出したい

    実現したいこと 以下のリスト D 男 E 男 A 男 C 男 B 男 から D のみを取り出すには、 どうすれば良いでしょうか。 ネットで調べた情報を元に

  • 解決済

    C# リスト検索の方法

    List<string> list = new List<string>; list.Add("A"); list.Add("ABC"); list.Add("RAND") lis

  • 解決済

    Linq Select 複数指定

    LinqのSelectで複数要素を指定する方法について 要素1~5がすべて空白のものをカウントする記述を教えてください (やりたい事のイメージとしては、下記の通りです。) va

  • 解決済

    c# html~情報取得~表示

    私は、プログラミング言語のc#を学び始めた初心者です。 関東でIT関連の仕事をしています。 以前に、少し趣味でJavaを少しかじってましたが、自主的に少しやっていた程度です

同じタグがついた質問を見る

  • C#

    4765questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。