ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

C#

IComparableとIComparer(オブジェクトのソートにまつわる話)

プログラミングC# p218IComparableとIComparerを使ってオブジェクトの比較方法を定義し、ソート順を決められます。 再びRectangleクラス。xの持つ値順に並び替えられるようにしてみます。 using System; using System.Collections; using System.Collections…

IEnumerable(オブジェクトをforeachできるようにする)

プログラミングC# p207さっきのRectangleをEnumerableにしてみる。 順番にxとyを返すというもの。 using System; using System.Collections; using System.Collections.Generic; class Rectangle : IEnumerable { private int x; private int y; public Rect…

インデクサ([]演算子を使ってアクセスする)

プログラミングC# p197オブジェクトに[]の機能を追加する機能です。 Rubyでもできますね。Javaはできないような気がします。 とりあえずサンプルコード。おなじみ(?)Rectangleのxをindex=0で、yをindex=1で読み書きできるようにしてみました。 using System;…

paramsキーワード(可変長パラメータ)

プログラミングC# p184パラメータをいくつ渡してもよいメソッドを作るためのキーワード。 呼び側はパラメータ数を任意の個数設定でき、受け側は設定された個数の配列で受け取れるという仕組み。 C言語でいうprintfみたいなのを実現するために使う。で、とり…

System.Array#BinarySearchとSystem.Array#IndexOfの違い

プログラミングC# p178 Binary Searchはソートされていないと使えないが、Index Ofはソートされていなくても使える。 オーダは、Binary Searchは件数のlog2に比例、Index Ofは件数に比例(だと思う)、のため、件数が多いほどBinary Searchの方が速くなる傾向…

オペレータオーバーロード

C#

プログラミングC# p125「6.2 他.NET言語への配慮」として、 C#には演算子をオーバーロードする機能がありますが、厳密なことをいうと、CLRにはそういった機能はありません。VB.NETなど他.NET言語は演算子オーバーロードの機能を持たないのです。そのため、C#…

入れ子になったクラス

プログラミングC# p122Javaでいうところの内部クラス。 内部クラスの内部クラスとか出来るのか試してみた。 using System; class Test { private class Inner { public class InnerInner { public void hello() { Console.WriteLine("Test.Inner.InnerInner#…

継承できないシールクラス

C#

プログラミングC# p117またも新しいキーワード「sealed」 これをクラスに指定すると、そのクラスからは継承できなくなる。 sealed class Sealed { } class Derived : Sealed { } コンパイルするとこうなる。 Sealed.cs(5,7): error CS0509: 'Derived': シー…

readonlyフィールド

プログラミングC# p100最初の一回だけ代入可能なフィールドのことらしい。 using System; class RDOnly { public static readonly int a; static RDOnly() { a = 12; } static void Main(string[] args) { Console.WriteLine("RDOnly.a = {0}", RDOnly.a); R…

.NET Framework(SDKでない)にコンパイラ(csc.exe)が含まれているの?

C#

今日外界から遮断された、もとい、インターネットにつながってるけどウェブ閲覧は禁止されている(ややこしい)仕事のPCでC#コンパイラを発見した。 まさか.NET Framework SDKがインストールされているわけもなし、ランタイムにコンパイラが含まれているのか…

ref引数

C#

プログラミングC# p88VBっぽくもあり、C言語っぽくもある感じ。 参照渡しなので、関数の中で書き換えたら呼び出し元にも影響あります。 using System; class ParamTest { static void refParam(ref int param) { param *= 2; Console.WriteLine("param = {0}…

IDisposableとusing文

C#

プログラミングC# p86〜87IDisposableを実装したクラスをusing文と共に作成すると、using文のブロックの終わりで自動的にDisposeメソッドが呼び出されます。 Rubyでいうところの、open関数のブロックみたいなものか? using System; class DisposeTest : IDi…

staticクラス

プログラミングC# p82C#では、インスタンス化できないクラス(staticクラス)を作成できます。 using System; static class StaticClass { static void main(string[] args) { StaticClass sc = new StaticClass(); } static void sMethod() { Console.WriteLi…

C#ではインスタンスを通してstaticメソッドを呼べない

C#

プログラミングC# p81 Javaプログラマ向け:C#では、インスタンスを通してstaticメソッドを呼び出すことはできません。 早速試してみた。 using System; class StaticClass { static void sMethod() { Console.WriteLine("static method."); } void iMethod(…

protected internalについて

C#

アセンブリA.DLLで定義したクラスを、アセンブリB.EXEで直接は使えないが継承して使うことができる。というようなキーワードだと思い、 using System; protected internal class Programmer { public void say() { Console.WriteLine("something said."); } …

DLLの作り方、および、呼び出し方(分割コンパイルのやり方)

C#

まずDLLを作る。 namespace mod1 { public class module { public static int add(int a, int b) { return a + b; } } } ここでは単純にintを加算する関数addを定義した。 コンパイルはこう。 csc /target:library module.cs この結果、module.dllが作成され…

オブジェクトの浅いコピー

プログラミングC# p78C#では、インタフェースICloneableを実装して、Cloneメソッド中でMemberwiseCloneメソッドを呼べば浅いコピーが出来ると記述してあります。 class SomeType : ICloneable { public Object Clone() { return MemberwiseClone(); } } Java…

C#ではswitch文に文字列が使える

C#

プログラミングC# p47たとえばこんなの。 using System; class switchstr { static void Main(string[] args) { switch(args[0]) { case "c#": Console.WriteLine("ms"); break; case "java": Console.WriteLine("sun"); break; default: Console.WriteLine(…

.NET Framework SDK 2.0をインストール

C#

http://www.microsoft.com/japan/msdn/netframework/downloads/ ildasm.exeが使いたいだけだったんですが、、 Visual Studioには標準添付されていないのですね。大分イマイチな感じ。

列挙型の値をConsole.WriteLineに渡すのにキャストが必要?

C#

プログラミングC# p36サンプルはこんな感じ。 using System; class EnumeratedConstants { enum Temperatures { WickedCold = 0, FreezingPoint = 32, LightJacketWeather = 60, SwimmingWeather = 72, BoilingPoint = 212, } static void Main(String[] arg…

定数に値を代入した時のエラーメッセージが分かりづらい件について

C#

プログラミングC# p34こんなプログラムを書くと、 class SymbolicConstants { static void Main() { const int FreezingPoint = 32; const int BoilingPoint = 212; System.Console.WriteLine("水の凝固点:{0}", Freez ingPoint); System.Console.WriteLine(…

インデント深い(名前空間の話)

プログラミングC#中のサンプルプログラムは、ひたすらnamespace宣言が付いている。 これが恐らく一般的なのだろうが、namespaceだけで1インデント行かれると、さらにclass、Mainでそれぞれ1インデントずつ下がるため、プログラムの中身は4段目から始まること…

VC# 2008 Express Editionをコマンドラインから使う

C#

デフォルトインストールした結果、コンパイラ(csc.exe)が C:\WINDOWS\Microsoft.NET\Framework\v3.5 にインストールされるようなので、これをPATHに通し、 csc hoge.cs などとしてコンパイルし、 hoge などとして実行できます。ソースファイル名=実行ファイ…

一つのプロジェクトに二つのMainは入れられない?(入れられるけど切り替えが必要)

C#

Program.csとClass1.csにそれぞれMainを入れると、こんなエラーが出ます(適宜改行)。 エラー 2 プログラム 'C:\Documents and Settings\Administrator\ My Documents\Visual Studio 2008\Projects\ConsoleApplication1\ ConsoleApplication1\obj\Release\Con…

親クラスのメソッドをサブクラスで上書きしたらどうなるか。

どうなるか@Java public class Override { public static void main(String[] args) { MyTest mt = new YourTest(); mt.hello(); } } class Test { public void hello() { System.out.println("Test#hello()"); } } class MyTest extends Test { public voi…

同一シグネチャのメソッドを持った別々のインタフェースを実装するとどうなるか

プログラミングC# 第四版 p166タイトルからして分かりづらいですが、要はJavaでいうところのこういうことです。 同じシグネチャ(public void func())を持った 別々のインタフェース(IFunc1とIFunc2)を 実装したクラス(FuncImpl)はどうなるか。 ということで…

Visual C# 2008 Express Editionインストールしました。

C#

どんどんパソコンを壊してる気がしてならない。。 そのうち、Visual Web Developer 2008 Express Editionもインストールすることでしょう。

「プログラミングC#」読み始めました。

プログラミングC#―C#2.0/.NET2.0/Visual Studio2005対応作者: ジェシーリバティ,Jesse Liberty,鈴木幸敏,首藤一幸,情報技研出版社/メーカー: オライリージャパン発売日: 2006/02メディア: 単行本購入: 1人 クリック: 27回この商品を含むブログ (43件) を見る…