コードコピーは次のとおりです。
//単一行のコメントは//で始まります
/*
これがマルチラインのコメントです
*/
/// <summary>
/// XMLドキュメントコメント
/// </summary>
//アプリケーションで使用される名前空間を宣言します
システムの使用。
System.collections.genericを使用しています。
System.Data.Entityを使用しています。
System.Dynamicを使用しています。
System.linqを使用しています。
System.linq.Expressionsを使用します。
System.netを使用しています。
System.threading.tasksを使用しています。
System.ioを使用しています。
//スコープを定義し、コードをパッケージに編成します
名前空間学習
{
//各.csファイルは、同じファイル名を持つ少なくとも1つのクラスを含める必要があります
//これを行うことはできないかもしれませんが、これは良くありません。
パブリッククラスLearnCSharp
{
//以前にJavaまたはC ++を使用したことがある場合は、次のテキスト「興味深い機能」に直接ジャンプできます。
public static void syntax()
{
// console.writelineを使用して情報を印刷します
console.writeLine( "Hello World");
console.writeLine(
「整数:」 + 10 +
「ダブル:」 + 3.14 +
"Boolean:" + True);
// console.writeで印刷して、ラインブレイクシンボルなしで書き込みます
console.write( "hello");
console.write( "world");
///////////////////////////////////////////////// /
//タイプと変数
//
// <Type> <name>を使用して変数を定義します
///////////////////////////////////////////////// /
// sbyte-署名された8ビット整数
//(-128 <= sbyte <= 127)
sbyte foosbyte = 100;
// byte-符号なしの8ビット整数
//(0 <= byte <= 255)
バイトfoobyte = 100;
//短い-16ビット整数
//署名 - (-32,768 <= short <= 32,767)
// unsigned-(0 <= ushort <= 65,535)
Short Fooshort = 10000;
Ushort fooushort = 10000;
//整数-32ビット整数
int fooint = 1; //
uint foouint = 1; //(0 = uint <= 4,294,967,295)
// long -64ビット整数
ロングフロー= 100000L; //(-9,223,372,036,854,775,808
ulong fooulong = 10000l;
//番号はデフォルトでintまたはuintになります(サイズに応じて)
// lを使用して、変数値タイプを長いまたはulongとして示します
//ダブル - ダブル64ビットIEEE 754フローティングポイント番号
double foodouble = 123.4; //精度:15-16ビット
// float-単一の精度32ビットIEEE 754フローティングポイント番号
フロートfoofloat = 234.5f; //精度:
// fを使用して、変数値タイプがフロートであることを示します
// Decimal -128ビットデータ型、他の浮動小数点タイプよりも高い精度で、財務と財務に適しています
10進数= 150.3m;
// boolean値 - true&false
bool fooboolean = true;またはfalse
// char-シングル16ビットユニコード文字
char foochar = 'a';
//文字列 - 前の基本タイプとは異なり、文字列は値ではなく、参照です。これは、文字列をnullに設定できることを意味します。
string foostring = " /" Escape /"quotes and add /n(new lines)および /t(tabs)";
console.writeLine(foostring);
//インデックスを介して文字列の各文字にアクセスできます。
charfromstring = foostring [1];
//文字列を変更できません:foostring [1] = 'x'は機能しません。
//現在のロケール設定に従って文字列を比較する、ケースが無感覚になります
string.compare(foosttring、 "x"、stringcomparison.currentcultureignorecase);
// sprintfに基づく文字列フォーマット
string foofs = string.format( "check check、{0} {1}、{0} {1:0.0}"、1、2);
//日付と形式
DateTime Foodate = DateTime.Now;
console.writeline(foodate.tostring( "hh:mm、dd mmm yyyy"));
// @シンボルを使用して、線全体に文字列を作成します。 ""を使用して表現する "
文字列bazstring = @"これがいくつかのものです
新しいラインで!
// constまたはread-onlyを使用して定数を定義し、定数はコンピレーション中に計算されます
const int hours_i_work_per_week = 9001;
///////////////////////////////////////////////// /
//データ構造
///////////////////////////////////////////////// /
//配列 - カウントは0から始まります。配列を宣言するときは、配列の長さを決定する必要があります。
//配列を宣言する形式は次のとおりです。
// <DataType> [] <var name> = new <DataType> [<ArraySize>];
int [] intarray = new int [10];
//配列を宣言および初期化する他の方法:
int [] y = {9000、1000、1337};
//配列の要素にアクセスします
console.writeLine( "intarray @ 0:" + intarray [0]);
//配列を変更できます
intarray [1] = 1;
//リスト
//リストはより柔軟であるため、リストは配列よりも一般的に使用されます。
//宣言リストの形式は次のとおりです。
// list <DataType> <var name> = new list <DataType>();
リスト<int> intlist = new list <int>();
List <String> StringList = new List <String>();
list <int> z = new list <int> {9000、1000、1337};
// <>ジェネリックの場合 - 以下を参照してください
//リストのデフォルト値はありません。最初に要素を追加する必要があります。
intlist.add(1);
console.writeLine( "intlist @ 0:" + intlist [0]);
//その他のデータ構造:
//スタック/キュー
//辞書(ハッシュテーブルの実装)
//ハッシュコレクション
//読み取り専用コレクション
// tuple(.net 4+)
//////////////////////////////
//オペレーター
//////////////////////////////
console.writeline( "/n-> operators");
int i1 = 1、i2 = 2;
//直接算術
console.writeline(i1 + i2 -i1 * 3/7);
//残りを取ります
console.writeline( "11%3 =" +(11%3));
//オペレーターを比較します
console.writeline( "3 == 2?" +(3 == 2));
console.writeLine( "3!= 2?" +(3!= 2));
console.writeline( "3> 2?" +(3> 2));
console.writeline( "3 <2?" +(3 <2));
console.writeLine( "2 <= 2?" +(2 <= 2));
console.writeline( "2> = 2?" +(2> = 2));
//ビットオペレーター
/*
〜逆
<<左に移動する(署名)
>>右に移動する(署名)
& そして
^ bitwise xor
|または
*/
//自己増加、自己排出
int i = 0;
console.writeLine( "/n-> inc/decentation");
console.writeline(i ++); // i = 1
console.writeline(++ i); // i =2。初期増加
console.writeline(i--); // i = 1
console.writeline( - i); // i = 0
//////////////////////////////
//制御構造
//////////////////////////////
console.writeLine( "/n->制御構造");
// cと同様のステートメントの場合
int j = 10;
if(j == 10)
{
console.writeLine( "印刷されます");
}
else if(j> 10)
{
console.writeLine( "I obs");
}
それ以外
{
console.writeline( "私もそうしません」);
}
//トリプルタイト式
//単純なif/elseステートメントは次のように書くことができます:
// <condition> <true>:<false>
文字列ISTRUE =(true): "false";
//ループ中
int foowhile = 0;
while(foohile <100)
{
// 100回イテレーション、FOOWHILE 0-> 99
foowhile ++;
}
//ループ中に行います
int foodowhile = 0;
する
{
// 100回反復、Foodowhile 0-> 99
foodowhile ++;
} while(foodowhile <100);
//ループ用
//ループ構造=> for(<初期条件>; <condition>; <step>)
for(int foofor = 0; foofor <10; foofor ++)
{
// 10回反復、Foofor 0-> 9
}
// foreachループ
// foreach loop structure => foreach(<iter Type> <Iter> in <enumerable struction>)
// foreachループは、ienumerableまたはienumerableを実装するオブジェクトに適しています。
// .NETフレームワークの下のコレクションタイプ(配列、リスト、辞書...)はすべてこれらのインターフェイスを実装します。
//次のコードでは、stringがienumerableを実装するため、tochararray()を削除できます。
foreach(「helloworld」のcharキャラクター.tochararray())
{
//文字列内のすべての文字を繰り返します
}
// Switchステートメント
//スイッチは、BYTE、SHORT、CHAR、およびINTデータ型に適しています。
//文字列クラスを含む列挙可能なタイプにも適用される、
//元の値をカプセル化するいくつかのクラス:文字、バイト、ショート、および整数。
int month = 3;
文字列数ヶ月ストリング;
スイッチ(月)
{
ケース1:
monthString = "1月";
壊す;
ケース2:
monthstring = "February";
壊す;
ケース3:
monthString = "March";
壊す;
//複数のケースステートメントを一度に一致させることができます
//ただし、ケースステートメントを追加した後、Breakを使用する必要があります
//(それ以外の場合は、GOTOケースXステートメントを明示的に使用する必要があります)
ケース6:
ケース7:
ケース8:
monthString = "Summer Time !!";
壊す;
デフォルト:
monthString = "他の月";
壊す;
}
//////////////////////////////
//文字列を整数に変換すると、変換が失敗した場合に例外がスローされます。
//////////////////////////////
//データの変換
//文字列を整数に変換すると、変換が失敗した場合に例外がスローされます。
int.Parse( "123"); //整数タイプの "123"を返します
// TryParseはタイプを変換しようとします、そして、それが失敗した場合、0などのデフォルトのタイプを返します
int tryint;
if(int.tryparse( "123"、out tryint))// funcitonはbooleanです
console.writeline(tryint);
//整数を文字列に変換します
// Convertクラスは一連の便利な変換方法を提供します
convert.toString(123);
// または
tryint.toString();
}
//////////////////////////////
// 親切
//////////////////////////////
public static voidクラス()
{
//ファイルの最後にオブジェクト宣言を参照してください
// newでオブジェクトを初期化します
自転車Trek = new bicycle();
//オブジェクトメソッドを呼び出します
trek.speedup(3);
trek.cadence = 100;
//オブジェクトの情報を表示します。
Console.WriteLine( "Trek Info:" + trek.info());
//新しいペニーファーシングをインスタンス化します
PennyFarting Funbike = new PennyFarthing(1、10);
console.writeline( "funbike info:" + funbike.info());
console.read();
} //メインメソッドを終了します
//ターミナルプログラムターミナルプログラムには、エントリとしてメインメソッドが必要です
public static void main(string [] args)
{
other InterestingFeatures();
}
//
//興味深い機能
//
//デフォルトメソッドの署名
パブリック//可視性
static //最初にインスタンスを作成せずにクラスへの直接呼び出しを許可します
int //戻り値
MethodSignatures(
int maxcount、//最初の変数、タイプは整数です
int count = 0、//着信値が渡されない場合、デフォルト値は0です
int別の= 3、
params string [] otherparams //他のパラメーターをキャプチャします
))
{
return -1;
}
//署名が異なる限り、メソッドは名前を変更できます
public static void Methodsignature(string maxcount)
{
}
// generics
//ユーザーで関数を呼び出すときにTKEYおよびTValueクラスが指定されます。
//次の関数は、PythonのSetDefaultをシミュレートします
public static tvalue setdefault <tkey、tvalue>(
Idictionary <tkey、tvalue>辞書、
tkeyキー、
tvalue defaultItem)
{
tvalueの結果;
if(!dictionary.trygetValue(key、out result))
return dictionary [key] = defaultItem;
返品結果;
}
//着信値の範囲を制限できます
public static void iterateandprint <t>(t toprint)ここで、t:ienumerable <int>
{
// tが列挙可能であるため、反復できます
foreach(トップリントのvarアイテム)
// ITTMは整数です
console.writeLine(item.toString());
}
public static void other Interestingfeatures()
{
//オプションのパラメーター
方法指示(3、1、3、 "some"、 "exrce"、 "strings");
方法指示(3、別:3); //明示的に、オプションのパラメーターを無視します
//メソッドを拡張します
int i = 3;
i.print(); //以下の定義を参照してください
// nullタイプは、データベースの相互作用と返品値に非常に役立ちます。
//接尾辞を追加した後、値タイプ(つまりクラスではありません)は無駄なタイプに追加されますか?
// <タイプ>?<変数名> = <値>
int?
console.writeLine( "nullable変数:" + nullable);
bool hasvalue = nullable.hasvalue; // nullではない場合はtrueを返します
// ??デフォルト値を指定するために使用される構文砂糖です
//変数がnullの場合
int notnullable = nullable ??
//変数タイプの推論
//コンパイラに変数タイプを推測させることができます。
var magic = "魔法はコンパイル時に文字列であるため、タイプの安全性が得られます";
// MAGIC = 9; //魔法は整数ではなく動作します。
// generics
//
var phonebook = new Dictionary <string、string>(){
{"Sarah"、 "212 555 5555"} //電話帳に新しいエントリを追加する
};
//上記で定義されたsetDefaultを汎用として呼び出します
console.writeline(setdefault <string、string>(電話book、 "shaun"、 "no phone"));
// tkeまたはtvalueを指定する必要はありません。暗黙的に導出されるため
console.writeline(setdefault(電話book、 "Sarah"、no phone "));
// lambda式 - コードの1行で関数を解くことができます
func <int、int> square =(x)=> x * x; //最後の項目は戻り値です
console.writeline(正方形(3));
//放棄可能なリソース管理 - 管理されていないリソースに簡単に対処できます。管理されていないリソース(ファイル演算子、デバイスコンテキストなど)にアクセスするほとんどのオブジェクトは、IDISPOSABLEインターフェイスを実装しています。
//使用されたステートメントは、あなたのために特徴的なオブジェクトをクリーンアップします。
使用(StreamWriter Writer = new StreamWriter( "log.txt")))
{
writer.writeline(「ここでは疑わしいものはありません」);
//スコープの終わりに、リソースはリサイクルされます
//(例外がスローされていても、それはまだリサイクルされます)
}
//並列フレームワーク
// http://blogs.msdn.com/b/csharpfaq/archive/2010/06/01/parallel-promging-in-net-framework-4-getting-started.aspx
var webサイト= new String [] {
「http://www.google.com」、「http://www.reddit.com」、
「http://www.shaunmccarthy.com」
};
var responses = new Dictionary <String、String>();
//各リクエストの新しいスレッドを開き、次のステップを実行する前に結果をマージします
Parallel.Foreach(Webサイト、
new paralleloptions(){maxdegreeofparallelism = 3}、// 3つのスレッドのmax
ウェブサイト=>
{
//ファイルに長い時間がかかることをする
(var r = webrequest.create(new uri(webサイト))。getResponse())を使用
{
応答[Webサイト] = R.ContentType;
}
});
//すべてのリクエストが完了するまで、次のコードは実行されません
foreach(responses.keysのvarキー)
console.writeLine( "{0}:{1}"、key、responses [key]);
//動的オブジェクト(他の言語で使用するのは非常に便利です)
Dynamic Student = new ExpandOObject();
Student.firstname = "First Name"; //最初にクラスを定義する必要はありません!
//メソッドを追加することもできます(文字列を受け入れ、文字列を出力)
Student.introduce = new func <string、string>(
(introduceto)=> string.format( "hey {0}、this is {1}"、student.firstname、introduceto));
console.writeLine(Student.Introduce( "Beth"));
// iQueryable <t> - ほとんどすべてのコレクションがそれを実装し、マップ/フィルター/削減スタイルアプローチをお届けします
var Bikes = new list <bicycle>();
bikes.sort();
bikes.sort((b1、b2)=> b1.wheels.compareto(b2.wheels));
var result =バイク
.where(b => B.Wheels> 3)//フィルター - チェーンで使用できます(iQueryableに戻る)
。ここ(b => b.isbroken && b.hastassles)
.select(b => b.tostring());
var sum = bikes.sum(b => b。wheels);
//自転車のいくつかのパラメーターに基づいて生成された暗黙のオブジェクトのリストを作成する
var bikesummaries = bikes.select(b => new {name = b.name、isawesome =!b.isbroken && b.hastassles});
//デモを行うことは困難ですが、コンパイラはコードがコンパイルされる前に上記のオブジェクトタイプを推定できます。
foreach(bikesummariesのvar bikesummary.where(b => b.isawesome))
console.writeline(bikesummary.name);
// asparallel
//邪悪な特性 - LINQと並列操作の組み合わせ
var three wheelers = bikes.asparallel()。ここで(b => b.wheels == 3).select(b => b.name);
//上記のコードは同時に実行されます。スレッドは自動的に開かれ、結果は個別に計算されます。マルチコアおよび大型のシナリオに適しています。
// linq -linqtosqlマッピングデータベース、linqtoxmlマッピングxmlドキュメントなど、iqueryable <t>をストレージにマップし、実行を遅らせます。
var db = new Bikerespository();
//実行が遅れます。これはデータベースのクエリに適しています
var filter = db.bikes.where(b => b.hastassles);
(42> 6)//たとえば、高度な検索機能など、条件付きフィルタリングを含む、条件付きフィルタリングを継続的に増やすことができます
filter = filter.where(b => b.isbroken);
var query =フィルター
.Orderby(b => B.Wheels)
.thenby(b => B.Name)
.Select(b => B.Name); //クエリはまだ実行されていません
//ここでクエリを実行すると、クエリを実行するときに読者が開かれますので、コピーを反復します
foreach(クエリの文字列自転車)
console.writeline(result);
}
} // LearnCSharpクラスを終了します
//同じ.csファイルに他のクラスを含めることができます
public static class拡張機能
{
//拡張機能
public static void print(このオブジェクトobj)
{
console.writeline(obj.tostring());
}
}
//クラスの構文を宣言します。
// <public/private/protected/internal> class <class name> {
// //データフィールド、コンストラクター、内部関数。
/// Javaでは、関数はメソッドと呼ばれます。
//}
パブリッククラスの自転車
{
//自転車のフィールドと変数
パブリックインクケイデンス//パブリック:どこでもアクセス可能
{
取得//取得 - 属性を取得する方法を定義します
{
_cadenceを返す;
}
//設定 - プロパティを設定するメソッドを定義します
{
_cadence = value;
}
}
プライベートインクデンス;
保護された仮想インターギア//クラスとサブクラスにアクセスできます
{
メンバーフィールドなしで自動プロパティを作成します
セット;
}
内部intホイール//内部:同じアセンブリ内でアクセスできます
{
得る;
プライベートセット
}
int _speed; //デフォルトはプライベートです。このクラス内でのみアクセスできます。
パブリックストリング名{get;
// enumタイプには、名前を値にマッピングする定数のセットが含まれています(特に指定されていない限り、整数)。
// enmu要素のタイプは、バイト、sbyte、short、ushort、int、uint、long、longになります。列挙は同じ値を含めることはできません。
パブリックエインムバイクブランド
{
aist、
BMC、
Electra = 42、//値を明示的に割り当てることができます
Gitane // 43
}
//このタイプは、自転車クラスで定義するため、インラインタイプです。このクラスの外側のコードは、bicycle.brandを使用して参照する必要があります。
パブリックバイクブランドブランド。
//静的メソッド
//静的メソッドのタイプはそれ自体であり、特定のオブジェクトに属していません。オブジェクトを参照せずにアクセスできます。
静的public public int bicycleseded = 0;
//読み取り専用値
//読み取り専用値は実行時に決定され、宣言またはコンストラクター内の値のみを割り当てることができます。
readonly bool _hascardsinspokes = false;
//コンストラクターは、クラスを作成する方法です。
//以下はデフォルトのコンストラクターです。
public bicycle()
{
this.gear = 1; //これはオブジェクトのメンバーにアクセスすることができます
CADENCE = 50;
_Speed = 5;
name = "bontrager";
brand = bikebrand.aist;
自転車作成++;
}
//コンストラクターの別の例(パラメーターを含む)
パブリック自転車(int startcadence、int startspeed、int startgear、
文字列名、bool hascardsinspokes、bikebrandブランド)
:base()//最初のコールベース
{
gear = startgear;
ケイデンス= startcadence;
_Speed = startSpeed;
name = name;
_HASCARDSINSPOKES = HASCARDSINSPOKES;
brand = brand;
}
//コンストラクターはチェーンで使用できます
Public Bicycle(int startcadence、int startspeed、bikebrandブランド):
これ(StartCadence、StartSpeed、0、 "Big Wheels"、True、Brand)
{
}
//機能構文:
// <public/private/protected> <return値> <function name>(<parameter>)
//クラスは、フィールドのフィールドにゲッターとセッターのメソッドを実装するか、プロパティを実装できます(これを使用することをお勧めします)。
//メソッドのパラメーターにはデフォルト値を持つことができます。デフォルト値の場合、メソッドを呼び出すときに対応するパラメーターを省略できます。
パブリックボイドスピードアップ(int increment = 1)
{
_speed += increment;
}
パブリックボイドの減速(int decroment = 1)
{
_Speed - =衰退;
}
//プロパティは、値にアクセスして設定できます。データのみにアクセスする必要がある場合は、プロパティの使用を検討してください。属性は、get and Set、またはその両方を定義できます。
プライベートブール_hastassles; // private変数
パブリックブールハスタッスル//パブリックアクセサ
{
{return _hastassles;
{_hastassles = value;
}
// 1つのライン内で自動プロパティを定義でき、この構文は自動的にフォールバックフィールドを作成します。ゲッターまたはセッターのアクセス修飾子を設定して、アクセスを制限できます。
パブリックブール{get;
//属性の実装は自動にできます
Public Int Framesize
{
得る;
// getまたはsetにアクセス修飾子を指定できます
//次のコードは、自転車クラスのみがフレームズセットを呼び出すことができることを意味します
プライベートセット;
}
//オブジェクトプロパティを表示する方法
public virtual string info()
{
"gear:" + gear +を返します
「ケイデンス:」 +ケイデンス +
「速度: " + _speed +
「名前: " + name +
「スポークのカード: " +(_hascardsinspokes?" yes ":" no ") +
「/n ------------------------------/n」
}
//メソッドは静的にすることができます。通常、補助方法で使用されます。
public static bool didwecreateenoughbycles()
{
//静的メソッドでは、クラスの静的メンバーのみを参照できます
自転車が作成した自転車を返します> 9000;
} //クラスが静的メンバーのみを必要とする場合は、クラス全体を静的クラスとして取得することを検討してください。
} //自転車クラスの終わり
//ペニーファーシングは自転車のサブクラスです
クラスペニーファーシング:自転車
{
//(Penny Farthingsは、大きな前輪を備えた自転車です。ギアはありません。)
//親コンストラクターを呼び出します
public pennyfarthing(int startcadence、int startspeed):
base(startcadence、startspeed、0、 "pennyfarthing"、true、bikebrand.electra)
{
}
保護されたオーバーライドインターギア
{
得る
{
0を返します。
}
セット
{
新しいargumentException( "ペニーファーシングにギアを切り替えることはできません");
}
}
パブリックオーバーライド文字列情報()
{
文字列結果= "PennyFarting bicycle";
result += base.toString();
返品結果;
}
}
//インターフェイスにはメンバーの署名のみが含まれており、実装されていません。
インターフェイスijumpable
{
Void Jump(int meter); //すべてのインターフェイスメンバーが暗黙的に公開されます
}
インターフェイスibreakable
{
bool broken {get;} //インターフェイスにはプロパティ、メソッド、イベントが含まれます
}
//クラスは1つのクラスのみを継承することができますが、任意の数のインターフェイスを実装できます
クラスマウンテンバイク:自転車、ijumpable、ibrakable
{
intダメージ= 0;
パブリックボイドジャンプ(intメーター)
{
ダメージ +=メートル;
}
パブリックブールが壊れています
{
得る
{
ダメージ> 100を返します。
}
}
}
/// <summary>
/// linqtosqlの例であるデータベースに接続します。 EntityFrameworkコードは最初に優れています(RubyのActiverCordに似ていますが、双方向です)
/// http://msdn.microsoft.com/en-us/data/jj193542.aspx
/// </summary>
パブリッククラスのバイカーポジトリ:DBSET
{
Public Bikerespository()
:base()
{
}
public dbset <bicycle> bikes {get;
}
} //名前空間を終了します
カバーされていないトピックは次のとおりです。
1.フラグ
2.アトリビュート
3。静的特性
4.Exceptions、要約
6.asp.net(web forms/mvc/webmatrix)
6。ウィンフォーム
7。Windowsプレゼンテーション財団(WPF)