【記】『.netの美』の読書ノート(一)C#言語の基礎

3584 ワード

前言
仕事の中で、私达は任务に出会って直接その业务のロジックを実现することに惯れて、しかしC#の本当のいくつかの基础知识、私达が长い间理解しないで强固な情な情况の下で、无视します.私は自分が使い方しか知らない原理の淵に向かっていることをよく知っています.だから、仕事の合間に、C#の基礎知識と底の原理を深く説明できる本を探していました.幸いにもネット上で「.netの美」という本を見ました.(--張子陽作)最初は簡単に読んだだけでしたが、下に読むほど、本の中で述べているのはすべて自分の弱さあるいは仕事の中で出会ったがその原理を解釈できない知識点であることを発見して、自分の印象を深めるために、だから読書ノートを書く考えを芽生えて、自分の学習のために記録があって、後で調べるのに便利で、理解を深めます.
一.C#言語ベース
1.1 C#タイプベース
C#のタイプは、値タイプと参照タイプの2種類に分けられます.もちろん、それらを区別するのは、コンピュータのメモリに割り当てられる方法が異なります.
区切る
1.値のタイプは、宣言された場所に常に割り当てられます.
a.参照タイプのメンバー変数として「ヒープ」に割り当てる
b.メソッドのローカル変数として「スタック」に割り当てる
2.参照タイプは常にヒープに割り当てられます
3.値タイプの変数を宣言すると、変数自体には、スレッドスタックに割り当てられる値タイプのすべてのフィールドが含まれます.
4.参照タイプ変数を宣言し、newオペレータを使用して参照タイプインスタンスを作成すると、その参照タイプの変数がスレッドスタックに割り当てられ、変数はスタック上の参照タイプインスタンスのメモリアドレスを保存します.変数自体には、定義されたタイプのデータは含まれません.
public class RefPoint
{
	public int x;
	public RefPoint(int x){
	this.x=x;
	}
	public RefPoint(){};
}

インスタンス化されていないことのみが宣言された場合、RefPoint r 1;スレッドスタックにデータを含まない変数と、メモリアドレスを含まないオブジェクトを指す変数のみを作成します.
この変数をnewオペレータでインスタンス化すると、r 1=new RefPoint(1)となる.以下のことを完成します.
  • アプリケーションスタック上に参照クラスオブジェクトのインスタンスを作成し、メモリアドレス
  • を割り当てる.
  • は、インスタンスの参照を構造関数に自動的に渡す.
  • このタイプのコンストラクタpublic RefPoint(int x){}
  • を呼び出す
  • は、このインスタンスの参照を返し、r 1変数に値を付与する.

  • 5.梱包と解体
    梱包とは、値タイプを等価な参照タイプに変換し、梱包された参照タイプを値タイプに変換することです.
    注意:解凍操作では、解凍後の変換を宣言するタイプを表示する必要があります.梱包はメモリスタック上で繰り返し行う必要があるため、実際のプログラムアプリケーションでは、無駄な梱包や梱包作業を回避し、メモリ消費を削減する必要があります.
    6.引用類型判定等
    System.Objectベースクラスでは、インスタンスメソッドEquals(object obj)、静的メソッドEquals(objectobjA,objectobjB)、静的メソッドReferenceEquals(Object objA,Object objB)の3つのメソッドを定義して、2つの参照タイプが等しいかどうかを判断します.
    著者らは、以下に示すように、以上の3つの方法の具体的な実装を示した.
    public static bool ReferenceEquals (Object objA, Object objB)
    {
    return objA == objB; // #1
    }
    public virtual bool Equals(Object obj)
    {
    return InternalEquals(this, obj); // #2
    }
    public static bool Equals(Object objA, Object objB) {
    if (objA==objB) { // #3
    return true;
    }
    if (objA==null || objB==null) {
    return false;
    }
    return objA.Equals(objB); // #4
    }
    
    

    ReferenceEquals()は、2つの参照変数が同じ変数を指しているかどうかを判断し、もしそうであればtrueを返します.これは参照が等しいことです.=に等しい.
    また、参照タイプについては、タイプのインスタンスに含まれる値が等しい場合でも、変数が異なるオブジェクト、すなわち参照値針のアドレスが等しくない場合、この2つの変数は等しくないことに注意してください.
    7.単純値タイプ判定等
    単純値タイプ:値タイプのメンバーには値タイプのみが含まれます.
    複雑な値タイプ:値タイプのメンバーには参照タイプが含まれます.
    値タイプの判定などで、Systemが呼び出されます.Value TypeのEquals()メソッド.方法の内容は簡単に言えば、まず2つのオブジェクトが同じタイプかどうかを判断し、そうでなければfalseに直接戻り、次にオブジェクト内のすべてのフィールドを判断し、反射機を利用して値タイプのすべてのフィールドを作成し、フィールドを遍歴し、フィールドとフィールドの比較を行う.
    8.オブジェクトコピー
    浅いレプリケーション:値タイプのメンバーに対して、それ自体がレプリケーションされます.参照タイプメンバーの場合は、スタック上でオブジェクトを再作成することなく、参照のみがコピーされます.その結果、新しいオブジェクトの参照メンバーとコピーされたオブジェクトの参照メンバーが同じオブジェクトを指します.
    相対的に、深度コピー:参照メンバーが指すオブジェクトもコピーします.プロシージャは、新しい参照メンバーが指すオブジェクトを作成し、オブジェクトに含まれるデータをコピーします.
    9.定量性と原子性
    オブジェクトの原子性:オブジェクトの状態は全体であり、1つのフィールドが変更された場合、他のフィールドも同時に変更されます.
    どのように実施しますか?オブジェクトのすべてのフィールドに値を割り当てるコンストラクション関数を追加します.
    オブジェクトの定数:オブジェクトのステータスが確定すると、再度変更できません.もう一度変更するには、新しいオブジェクトを再作成する必要があります.
    どのように実施しますか?プロパティのsetアクセサを削除し、フィールドをreadonly読み取り専用状態として宣言できます.
    二.小結
    著者はこの章で主にC#のタイプを説明し、値のタイプと参照のタイプ、簡単なタイプと箱を分解して装飾する過程、および後続のオブジェクトの判断など、深浅な複製とオブジェクトのいくつかの特性などを含む.この章を読むことによって、C#という基礎概念に対する理解を深め、強固にしました.大学もこれを学んだことがあるに違いありませんが、仕事に入るにつれて、徐々に接触してきたのは仕事中の業務論理が処理され、関心も業務論理がどのように実現されるかなど、基礎を理解するいくつかの知識点を振り返る精力はめったにありません.
    今日の午前中、ネット上である大物が発表した博文を見た.しかし、知識点の概念を見ると読めなくなり、たまには他にも忙しくなることがあります.
    あるブロガーに聞いたことがありますが、なぜ文章がそんなに上手なのか、何でも文章の素材に使えるような気がします.自分を見てみましょう.努力していますが、目標がなく、方向がありません.2020年ももうすぐ終わり、昨年決めた目標も忘れてしまうほどの差はないので、次の時間に、急いで自分を充実させてほしいですね.