Home New Help Edit

C# memo


Suns & Moon Laboratory

Generic

Genericを使うといろいろと便利
using System.Collections.Generic; List<T> Queue<T>

foreach

foreach(KeyValuePair<string,string> kvp in value_dic) { kvp.Key; kvp.Value; }

同期

WaitAll(WaitHandle[])

列挙

public enum eJudge { TachiBlue = 0, TachiRed, TachiYellow }

abstractな関数

関数だけで無く、クラス宣言にもabstract必要

abstract public class AbsBaseClass { abstract public void Func(); } public class MyClass : AbsBaseClass { override public void Func() { Console.WriteLine("MyClass Hello!!"); } }

コンストラクタの継承

using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("---- new IkBook()"); IkBook book = new IkBook(); Console.WriteLine("---- new IkBinder()"); IkBook binder = new IkBinder(); Console.WriteLine("---- new IkBook(string)"); IkBook book2 = new IkBook("test"); Console.WriteLine("---- new IkBinder(string)"); IkBook binder2 = new IkBinder("test"); } } class IkBook { public IkBook() { Console.WriteLine("IkBook()"); } public IkBook(string prm):this()//★このthisでIkBook()呼び出し { Console.WriteLine("IkBook(string)"); } } class IkBinder : IkBook { public IkBinder() { Console.WriteLine("IkBinder()");//引数無しは、暗黙にbaseのコンストラクタが呼ばれる } public IkBinder(string prm):base (prm)//★このbaseでIkBook(string)を呼び出し { Console.WriteLine("IkBinder(string)"); } } }
実行結果
---- new IkBook() IkBook() ---- new IkBinder() IkBook() IkBinder() ---- new IkBook(string) IkBook() IkBook(string) ---- new IkBinder(string) IkBook() IkBook(string) IkBinder(string) 続行するには何かキーを押してください . . .

インデクサ

プロパティを配列風アクセス

using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Books books = new Books(); Console.WriteLine("-------- before"); Console.WriteLine(books[0]); Console.WriteLine(books[1]); Console.WriteLine(books[2]); books[1] = "デザインウェーブマガジン"; Console.WriteLine("-------- after"); Console.WriteLine(books[0]); Console.WriteLine(books[1]); Console.WriteLine(books[2]); } } class Books { List<string> Items = new List<string>(); public Books() { Items.Add("トラ技"); Items.Add("DWM"); Items.Add("Interface"); } public string this[int i] { set { Items[i] = value; } get { return Items[i]; } } } }

ファイルの列挙

参考:@IT:.NET TIPS ファイルやディレクトリの一覧を取得するには? - C#
using System.IO;//Directory namespace test_FindFirst { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { EnumDirsFiles("D:\\testdata"); } void EnumDirsFiles(string dir) { //ファイルの列挙 string[] files = Directory.GetFiles(dir); foreach (string s in files) { listBox1.Items.Add(s); } //ディレクトリの列挙 string[] dirs = Directory.GetDirectories(dir); foreach (string s in dirs) { EnumDirsFiles(s);//再帰呼び出し } } } }

日付時刻

DateTime dt = DateTime.Now; System.Console.WriteLine(dt.ToString("yyyyMMddHHmmss"));

時間計測

System.Diagnostics.StopWatchを使う
参考:http://www.atmarkit.co.jp/fdotnet/dotnettips/412stopwatch/stopwatch.html

ネットワークドライブのプロジェクトでセキュリティ例外

ネットワークドライブ上のプロジェクトを開こうとすると、セキュリティ例外が発生します。
対処方法は、コンパネ→管理ツール→Microsoft.NET Framework 2.0構成→マイコンピュータ→ランタイムセキュリティポリシー→エンタープライズ→コードグループ→All_Code→このレベル以下のポリシーレベルは評価しないをチェック


画像描画いろいろ

なんかいろいろあってわかり辛いのでまとめ。

Image系

抽象化されていない画像形式。だと思う。
Image←Bitmap
Image←Metafile

Graphics系

抽象化された画像
Graphics GDI+描画サーフェイスをカプセル化

  1. Control.CreateGraphics()
  2. Control.PaintイベントのPaintEventArgs引数で、Graphicsを取得可能
  3. ImageからSystem.Drawing.Graphics.FromImage()で作成可能
Graphics.DrawImage()で、Imageを描画可能

配列の処理速度(Array,List)


  1. ArrayとListは、Listが2〜3倍くらい遅い
  2. Listは、(当然だが)メモリを喰う。
  3. Arrayは、確保した量だけメモリを喰う。
  4. ArrayはResize時、要素の全てをコピーする

C#で__LINE__や__FILE__プリプロセッサマクロを使いたい

まさにこれ→http://messiah-annex.at.webry.info/200502/article_7.html
StackFrameを使うとは、なるほどねぇ。

C言語のmemcpyしたい


Array.CopyTo

ちゃんと型変換してくれちゃう...してくれなくても良いのにねぇ。
byte[] arr1 = new byte[] {0,1,2,3,4,5,6,7}; UInt32[] arr2 = new UInt32[8]; arr1.CopyTo(arr2,0); for (int i = 0; i < arr2.Length; i++) { System.Console.WriteLine(arr2[i].ToString()); }

Buffer.BlockCopy

これこれ、まさにmemcpy。でもヘルプの解説意味わからん。
引数は、バイトオフセットとかバイト数なので注意。
byte[] arr1 = new byte[] {0,1,2,3,4,5,6,7}; UInt32[] arr2 = new UInt32[8]; Buffer.BlockCopy(arr1, 0, arr2, 0, arr1.Length); for (int i = 0; i < arr2.Length; i++) { System.Console.WriteLine(arr2[i].ToString()); }

C言語のmemsetしたい

簡単な方法は無さそうです。
0初期化ならば、newすれば良いかと思われます。
int[] arr = new int[10]; arr = new int[10];

delegate

デリゲート
Formのイベントなんかの実装は、これ。だと思う。
using System; namespace TestDeleGate { public delegate void DelegateX(); //デリゲートの定義 public class MyClass1 { public DelegateX EventX;//デリゲートの変数宣言 } class Program { static void Main(string[] args) { MyClass1 obj1 = new MyClass1(); obj1.EventX = event_x;//デリゲートに関数割り当て obj1.EventX(); //割り当てた関数呼び出し } static void event_x() { Console.WriteLine("デリゲート呼び出し"); } } }

描画


クラス

PictureBoxFormに配置出来るコントロール
ImageBitmap,Metafileの抽象基本クラス
Graphics描画操作はこのクラス(GDI+をカプセル化)

画像を描画するには、Graphicsを使う。Graphicsの作成方法。

Graphicsを作成する方法
  1. イベントの一部から取得。PaintEventArgs.Graphics
  2. コントロールの、CreateGraphicsメソッドを使う
  3. Imageから作成する。System.Drawing.Graphics.FromImage(System.Drawing.Image)
描画は、大きく二種類に分かれる
XXXには代表的(というか、自分が使いそうなのは)に、こんなのがある。

描画のスタイル指定に使うオブジェクト

Pen

端点の形 Pen.StartCap,Pen.EndCapをLineCapで指定する。
線の接合部の形 LineJoin

座標変換

Matrixを使うか、Graphicsの下記メソッドを使う。

Matrix操作

クリッピング

DLLを呼ぶ

VC#2010
DLLの文字列がPAnsiChar(LPCSTR)なら、stringで良いみたい。
http://www.s-m-l.org/dev/delphi.html#DLL
namespace WindowsFormsApplication1 { public partial class Form1 : Form { [System.Runtime.InteropServices.DllImport("testdll1.dll")] private extern static void func1(string path, uint opt); private void button1_Click(object sender, EventArgs e) { func1(textBox1.Text, 1); } } }
Home New Help Edit
2012-11-25 11:06:15 32400