C#プロジェクト学習記録

6063 ワード

1,Visual StudioコードVS 2017の開発者コマンドプロンプトを追加---C#コンパイル環境
2,C#コンパイラとCLIのインストール
注意:自分のパソコンで環境変数を設定する場合、システム変数のPathに設定しても効果はありませんが、ユーザー変数に設定するだけで効果があります.
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
3,C#プログラム構造分析例
構造解析だけでなく、コード自体のスタッククラスも丁寧に分析しておくと面白いです.1000のitemにはnextという属性があり、100のitemを指し、100のitemのnext属性はまた10のitemを指しています・・・
まず、C#プログラムを入力します.
using System;
namespace Acme.Collections
{
    public class Stack
    {
        Entry top;
        public void Push(object data) {
            top = new Entry(top, data);
        }
        public object Pop() {
            if (top == null) throw new InvalidOperationException();
            object result = top.data;
            top = top.next;
            return result;
        }
        class Entry
        {
            public Entry next;
            public object data;
            public Entry(Entry next, object data) {
                this.next = next;
                this.data = data;
            }
        }
     }
}

 
Acmeという名前です.CollectionsのネーミングスペースにはStackというクラスが宣言されています.Acme.Collections.Stackはこのような完全限定名です.このクラスには、topというフィールドと、PushとPopというメソッドとEntryというネストされたクラスの2つのメンバーが含まれています.Entryクラスには、nextというフィールド、dataというフィールド、構造関数の3つのメンバーも含まれています.この例のソースコードをファイルacmeに格納とする.csでは、csc/t:library acmeというコマンドラインを実行します.csは、この例をライブラリ(Mainエントリポイントのコードがない)にコンパイルし、acmeという名前を生成する.dllのプログラムセット.プログラムセットは、中間言語(Intermediate Language,IL)命令形式の実行可能コードおよびメタデータ形式のシンボル情報を含む.プログラムセットを実行する前に、NET共通言語実行時のリアルタイム(JIT)コンパイラは,プログラムセットのILコードをプロセッサ固有のコードに自動的に変換する.プログラムセットは、コードとメタデータを含む自己記述機能ユニットであるため、C#にはincludeコマンドとヘッダファイルは必要ありません.C#プログラムで特定のプログラムセットに含まれる共通のタイプとメンバーを使用するには、プログラムをコンパイルするときにプログラムセットを参照するだけです.例えば、以下のプログラムではacmeからのプログラムが使用する.dllプログラムセットのAcme.Collections.Stackクラス:
using System;
using Acme.Collections;
class Test
{
    static void Main() {
        Stack s = new Stack();
        s.Push(1);
        s.Push(10);
        s.Push(100);
        Console.WriteLine(s.Pop());
        Console.WriteLine(s.Pop());
        Console.WriteLine(s.Pop());
    }
}

 
このプログラムがファイルtestに格納場合.csでは、testをコンパイルします.csの場合、コンパイラの/rオプションを使用してacmeを参照できます.dllプログラムセット:csc/r:acme.dll test.csはtestという名前を作成する.exeの実行可能プログラムセットは、100101 C#で1つのプログラムのソーステキストを複数のソースファイルに格納できます.複数のファイルからなるC#プログラムをコンパイルすると、すべてのソースファイルが一緒に処理され、ソースファイルは自由に相互参照できます.概念的には、処理前にすべてのソースファイルを1つの大きなファイルにマージするようにします.C#には、ごく少数の例外を除いて、宣言の順序は重要ではないため、前方宣言は必要ありません.C#は、1つのソースファイルに対して1つの共通タイプしか宣言できないことを制限しないし、ソースファイルの名前がそのソースファイルで宣言されたタイプと一致することも要求しない.
以上の分析を通じて、MSDNのドキュメントを閲覧するのに一定の助けがあり、何か困っているクラスや方法で心配することはありません.
4,C#解析xml関連:
xmlにネーミングスペースがある場合(このネーミングスペースがデフォルトであっても別名であっても)、xmlDocumentのselectNodes()などのメソッドを使用する場合は、ネーミングスペースマネージャという2番目のパラメータを入力する必要があります.ネーミングスペースの名前は自分で勝手に取ることができ、xpath(すなわちselectNodes()の最初のパラメータ)で対応できればよい.たとえば、元のxmlにはネーミングスペースxmlns:o="http://www.a.com」というように使えます.
XmlDocument xmlRelDoc = new XmlDocument();
xmlRelDoc.Load(relXmlPath);

XmlNamespaceManager nsp = new XmlNamespaceManager(xmlRelDoc.NameTable);
nsp.AddNamespace("y", "http://www.a.com");//   y       ,     xPath             。
, xml xmlns="http://www.b.com", selectNodes() ( ) ( ), xPath
XmlNodeList relationNodes = xmlRelDoc.SelectNodes("//y:Relationship", nsp)

 
2,//は子孫を表し,a//bはaノード子孫のすべてのbノードを表す.
 
5,
6,