タグ

ブックマーク / ufcpp.net (15)

  • [雑記] エントリーポイント

    概要 C# では通常、1つのプログラムは複数の C# ソースコードからなり、そのソースコード中には複数の関数が含まれています。 その、多数ある関数の中で、プログラム起動時に最初に呼ばれるものをエントリーポイント(entry point: 入場地点)と呼びます。 「C# のプログラムの基構造」で例を出したように、 C# では、Mainという名前の関数が自動的にエントリーポイントになります。 (「関数」内でも補足していますが、 正確にいうと、Mainという名前のメソッドがエントリーポイントになります。) [補足] C# スクリプト スクリプト実行の場合は関数で囲わなくてもどこにでも処理を書けます。 Main関数も不要です。 Main の引数、戻り値 Mainの引数と戻り値は、以下のいずれかである必要があります。 これ以外のオーバーロードはエントリーポイントになりません。 static int

    [雑記] エントリーポイント
    korinchan
    korinchan 2018/03/31
    非同期Mainについて
  • Visual Studio 15.6 リリース

    なんかVisual Studioの更新に 15.6.0 の正式版が配信されてますね。 ブログとかのアナウンスはまだなさそう。グロサミに来たMVPからのフィードバック欲しくてとりあえずリリースだけしちゃったとかですかね。ホテル・会場のWi-Fi負荷が… それか、preview 4の時の告知から内容変わってないから書くことないか? navigation to decompiled sources navigation to decompiled sourceとか便利そうではあります。まだ「experimental」がついていますけども。 今まで、DLL で参照しているものは、F12で「定義へ移動」しても、シグネチャ(どのクラスにどういうメソッドが、どういう引数であるか)しかわかりませんでしたけども。 それが、逆コンパイル処理をした C# コードを見れるようになるというもの。 設定は以下の場所か

    Visual Studio 15.6 リリース
  • ジェネリクスの共変性・反変性(C# によるプログラミング入門)

    概要 Ver. 4.0 C# 4.0 で、ジェネリクスの型引数に共変性・反変性を持たせることが可能になりました。 (共変性・反変性という言葉の意味は「covariance と contravariance」参照。) ジェネリックの共変性・反変性 ジェネリクスの共変性・反変性というものがどういうものかというのを説明する前に、まず背景を。 ジェネリックコレクションに関して、昔から以下のようなことをしたいという要望がありました。 List<string> strings = {"aa", "bb", "cc"}; List<object> objs = strings; これを認めてしまうと何がまずいかというと、 以下のような不正な値の書き換えが起こり得る。 // strings と objs は同じオブジェクト objs[0] = 5; // int に書き換えられたらまずい string s

    ジェネリクスの共変性・反変性(C# によるプログラミング入門)
    korinchan
    korinchan 2018/03/01
  • await って言う単語

    C# 5.0で非同期メソッドが導入されてから、 正式リリースを基準にしても5年以上、 最初の発表からだと7年以上経っています。 で、5年経っても、「なんて読むの」「asyncのaとawaitのaは違う」などなどが「定番ネタ」として定期的に出てくるわけですが。 特に、ECMAScript 2017がasync/awaitを導入したり、 Unity 2017がやっとC#のバージョンを6.0に上げれる感じになってきたり、 5年の断絶を経て去年からasync/awaitに触れる人が増えているようです。 5年も離れたら、世代断絶も起こりますよね… そりゃ、「定番ネタ」が改めて増えもしますよね… ということで、5年くらい前に同じようなことをどこかで書いてるはずなんですけど、改めて。 英単語 えいしんく まず読み方。 async: エイシンク await : アウェイト ってやつ。async の方が「ア

    await って言う単語
    korinchan
    korinchan 2018/01/27
  • 小ネタ コレクション初期化子

    昨日のオブジェクト初期化子に続き、今日はコレクション初期化子の話。 コレクション初期化子ってのは、例えば以下のようなやつのことです。 // この、{} の部分がコレクション初期化子。 var x = new List<int> { 1, 2, 3, 4, 5 }; このコレクション初期化を使える条件は、Add メソッドを持っていて、かつ、 IEnumerable を実装していることです。 最低限の実装をしてみると、以下のような感じ。 class MyList : IEnumerable { List<int> _list = new List<int>(); public void Add(int value) => _list.Add(value); public IEnumerator GetEnumerator() => _list.GetEnumerator(); } static

    小ネタ コレクション初期化子
    korinchan
    korinchan 2018/01/27
  • [雑記] 動的コード生成のパフォーマンス(C# によるプログラミング入門)

    概要 .NET Framework のバージョンが上がるたびに色々と追加され、 今や、動的コード生成にもさまざまなやり方が。 ということで、並べて比較してみたいと思います。 「動的 = リフレクション = むちゃくちゃ遅い」というイメージをもたれる方も多いと思いますが、 実際のところ、1度生成したコードをキャッシュしておくなどの工夫をすれば、意外と許容範囲なパフォーマンスが得られます。 (GUI の描画部分やネットワーク通信部分の遅延と比べれば、演算部分の数倍程度の差は取るに足らない場合が多く、 過剰に気にする必要はありません(もちろん、状況次第)。) 比較コード含めたソースコード一式: DynamicPerformance.zip ポイント 毎回リフレクションを呼び出すのはやっぱりかなり(2~3桁)遅い。 キャッシュ機構を使えば、静的なコードの数倍程度までは速くできる。 C# 4.0 の

    [雑記] 動的コード生成のパフォーマンス(C# によるプログラミング入門)
    korinchan
    korinchan 2018/01/05
  • ピックアップRoslyn 7/30: C# 7.1の先の計画& .NET でのメモリ手動管理 | ++C++; // 未確認飛行 C ブログ

    C# 7.1 がらみの作業も落ち着いたところで、 その先の優先度付け的な Design Notes がアップロードされていました。 C# Language Design Notes for Jul 5, 2017 概ね以下のような感じ。 構造体の活用(特に ref がらみ)は C# 7.2 でまとめて実装 Utf8String は C# 8.0 に回りそう static delegate とかいう話が出てる(C# 8.0向け) static なメソッドは関数ポインターで直接管理したいという話 static なメソッドしか参照しないデリゲートのために Delegate 型インスタンス(ヒープを使う)を作りたくない その他、バグっぽい挙動に関して 自動実装プロパティで、バッキングフィールドに対して属性を適用できなかった問題(いつでも修正する用意あり) long tuple (System.Va

    ピックアップRoslyn 7/30: C# 7.1の先の計画& .NET でのメモリ手動管理 | ++C++; // 未確認飛行 C ブログ
    korinchan
    korinchan 2017/07/30
  • C# 6 の新機能 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

    「C# 5.0」正式リリースの後、「.NET Compiler Platform」の開発が始まり、 当初は既存の C# コンパイラーとの互換性を保つことが優先されていて、しばらく C# の新機能実装が止まっていました。 これまでだと、C# 4.0の正式版がリリースされた瞬間に C# 5.0 のプレビュー版が提供されたりといったように、ほぼ切れ目なく新機能の発表がありましたが、 今回、C# 6 は、 5.0 から2年ほどの空きができました。 しかし、「.NET Compiler Platform」が完成したことで、 かかるコストの割には効果が薄いということでこれまで実装されてこなかったような、ちょっとした便利機能が実装されやすくなりました。 結果として、C# 6 では(C# 5.0 の時の非同期メソッドのような)大きな機能はない代わりに、 (C# 3.0 の時にも似たような)細々とした便利な

    C# 6 の新機能 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
    korinchan
    korinchan 2017/04/18
  • 小ネタ atan2 | ++C++; // 未確認飛行 C ブログ

    今日は、MathクラスのAtan2メソッドの話。あんまり数学がわかってない人だと、「tanの逆関数」なのにどうして2引数あるのかとか、AtanとAtan2で戻り値の範囲が違う(前者が-90度~90度、後者が-180度から180度)のが不思議だったりするみたいですね。 大元をたどるとatan2はFORTRANとかC言語とかの頃からあって、ちょっと調べれる範囲でもFORTRAN 77の時点であったらしいので、少なくとも1977年より前まで遡ります。なのでC#の小ネタというよりはプログラミング全般の小ネタだったり、むしろ、単に数学の話だったり。 x軸とのなす角 単純化のために、まずは半径1の円周上の点(x, y)の1点だけを考えて、原点からこの点までの線分と、x軸がなす角を考えます。以下の絵のような感じ。 この絵を見ての通り、以下の条件を満たすθを計算することになります。 x=cos⁡θ y=s

    小ネタ atan2 | ++C++; // 未確認飛行 C ブログ
  • C#の今と未来

    先週金曜日の、ブログに残しとくの忘れてた。 「開発エキスパートに学ぶ! C# と Visual Studio の今と未来」ってタイトルのセミナーで登壇してきました。 古賀さんの書籍「チーム開発の教科書 C#によるモダンな開発を実践しよう! Visual Studio 」の出版記念だったりします。 ということで、多少チーム開発のことを意識しつつで「C#の今と未来」な話をしてきました。 どういう背景があって今のC#があるか、C#の言語仕様の裏にある設計思想みたいな感じの話を中心に。あと、少しだけ、オープンソースになって少し見えてきている今後の話を。 まあ、前半とかは、C#に限らず、新しめのプログラミング言語には共通して言えるような話かなぁとも思います。良いとされるパターンを楽に書けないといけない。さもないと、特にチーム規模大きくなればなるほど、締め切りに追われて負債の蓄積。 新しい技術、特にプ

    C#の今と未来
    korinchan
    korinchan 2015/10/19
  • 演算子のオーバーロード

    概要 オブジェクト指向言語ではクラスを定義することで自分の思い通りの「型」を作ることが出来ます。 このような自作の型は、int や double などの組込み型と区別するため、 ユーザー定義型と呼ばれています。 ユーザー定義型の理想は、組込み型とまったく同じように扱えることです。 ユーザー定義型をあたかも組込み型であるかのように扱えるようにするため、 C#には演算子のオーバーロードというものが用意されています。 C#の組込み型には + や - などの演算子が用意されていますが、 演算子のオーバーロードを行うことで、 ユーザー定義型にも自分で演算子を定義することが出来、 組込み型と同じように扱うことができます。 このように、演算子のオーバーロードによってユーザ定義型に追加された演算子のことをユーザ定義演算子と呼びます。 ポイント 組み込み型(int や string など)とユーザー定義型(

    演算子のオーバーロード
  • 拡張メソッド(C# によるプログラミング入門)

    概要 拡張メソッドは、静的メソッドをインスタンスメソッドと同じ形式で呼び出せるようにできるものです。 すなわち、 今までなら、 int x = int.Parse("1"); と書いていたものを、 static class Extensions { public static int Parse(this string str) { return int.Parse(str); } } というような静的メソッドを用意することで、 以下のような構文で呼び出せるようになります。 int x = "1".Parse(); ポイント 拡張メソッド: 静的メソッドをインスタンスメソッドと同じ書式で呼び出せるようにすることで、 あたかもクラスに新しいメソッドを追加したかのように見せかける仕組みです。 単に、静的メソッドを後置き記法で呼び出せるようになっただけとも考えることができます。 定義側: 第1引

    拡張メソッド(C# によるプログラミング入門)
    korinchan
    korinchan 2013/11/25
  • dynamic(C# によるプログラミング入門)

    概要 Ver. 4.0 .NET Framework 4.0 では、クラスライブラリに Dynamic Language Runtime (DLR)が追加されました。 DLR は、.NET Framework 上で PythonRuby のような動的言語を動かすためのライブラリで、 これに伴い、C# 4.0 にも、動的言語との連携を強化するための仕組みが追加されました。 C# 4.0 で導入された、動的言語との連携の仕組みの1つが動的型付け変数(dynamic キーワード)です。 動的型付け変数を使うことで、動的な(コンパイル時にメンバー情報がわからない型の)メンバーアクセスが可能になります。 動的型付け変数 dynamic キーワードを使うことで、動的型付け変数を定義できます。 使い方としては、dynamic x; というように、変数宣言の型のところに dynamic キーワードを

    dynamic(C# によるプログラミング入門)
    korinchan
    korinchan 2012/05/18
  • C# によるプログラミング入門 [データ処理] LINQ

    概要 Ver. 3.0 C# 3.0(そして、同時に発表された VB 9.0)の目玉となる新機能は、 Language Integrated Query、略して LINQ と呼ばれるもので、 リレーショナルデータベースや XML に対する操作をプログラミング言語に統合するものです。 LINQ を用いることで、様々なタイプのデータソースに対する検索や操作を、 共通の構文で行うことができます。 IEnumeable を実装するコレクションクラスに対するもの(LINQ to Object)や、 XML に対するもの(LINQ to XML)、 それに、リレーショナルデータベースサーバに対する SQL クエリを生成するもの(LINQ to SQL)などがあります。 LINQ には以下のような利点があります。 オブジェクト指向言語らしい書き方でデータベースへの問い合わせができます。 in-memor

    C# によるプログラミング入門 [データ処理] LINQ
    korinchan
    korinchan 2011/09/30
  • [雑記] 型推論の是非(C# によるプログラミング入門)

    概要 Ver. 3.0 C# 3.0 では、var キーワードを用いて、暗黙的に型付けされたローカル変数を定義できるようになりました(型推論(type inference))。 型推論は便利な機能ではあるんですが、“いいことずくめ”なものではなく、少々副作用もあって、 その利用形態をめぐって軽い論争が起きたりもしています。 具体的にいうと、var の利用ポリシーとして、 以下のようなものが考えらていて、 どれがいいのかでもめています。 匿名型利用時など、どうしても必要なときだけ使う ↑に加え、右辺が new SomeClass() のようなときだけ var を使う int, string などの組み込み型に対しては使わない 使えるところでは全部使う “いいことずくめ”なんだったら「使えるところでは全部使う」でいいんですが、 最初に言ったように、少々副作用を伴うので、利用を制限した方がいいの

    [雑記] 型推論の是非(C# によるプログラミング入門)
    korinchan
    korinchan 2009/12/16
  • 1