読者です 読者をやめる 読者になる 読者になる

partial class

protect

とかはなんとなくわかるけど

partical パーシャルクラスってなんぞ?と思ったので

 

きっかけは

<<Form1.Designers.cs>>

 

にpartial class Form1があったからです

 

<<Form1.cs>>

と分割されてました

    public partial class Form1 : Form
    {

 

 

partial class Form1
    {
        /// <summary>
        /// 必要なデザイナー変数です。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        /// <param name="disposing">マネージ リソースが破棄される場合 true、破棄されない場合は false です。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

 

では、どういうものなのか

 

code.msdn.microsoft.com

 

partial クラス とは

一つのクラスを 分割して記述する機能です

 

using System; 
 
partial class A 
{ 
    private int a=0; 
} 
 
partial class A 
{ 
    public int Count 
    { 
        get { return ++a; } 
    } 
} 
 
class Program 
{ 
    static void Main(string[] args) 
    { 
        var x = new A(); 
        Console.WriteLine(x.Count); 
    } 
}

このコードだと クラスAが二つ書かれているように見えますが
実際は 1つのAクラス。
という扱いです。

ここはコピペ
===========================

private メンバーへのアクセスも可能です。例えば、上記の例で、フィールド a は、同じクラスにあると見なされるので、2 番目の (A の) クラス定義の中からでもアクセス可能です。

この 2 つの定義は、別のソース ファイル上にあっても構いません。しかし、それら複数のソース ファイルは同時にコンパイルする必要があります。単に、ソース コードがファイルとして分割されているだけで、実体としては 1 つのクラスだからです。



===========================

ではなぜ、こういうのがあるのか?

ファイルに変更によってプログラマが自分の作成したファイルを変更しないで済む。


コピペ
===========================

実際、Visual Studio ではこの機能が多用されています。例えば、Windows フォーム アプリケーションや ASP.NET アプリケーションでは、デザイナーでコントロールを配置した結果を反映するソース ファイルと、実際にプログラマー自身がプログラムを記述するソース ファイルが分離されていて、これらは、部分クラス (partial) を使った 1 つのクラスになっています。(そのため、プログラマーは、Visual Studio が自動的に生成した private なメンバーを参照してコードを記述できます。)

===========================

実験
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


partial class A
{
    private int a = 0;
}

partial class A
{
    public int Count
    {
        get { return ++a; }
    }

}


    class Program
    {
        static void Main(string[] args)
        {
            var x = new A();
            Console.WriteLine(x.Count);

            //呼び出した時点で、 a=0 → getプロパティ→int Count =1 がされるみたい
            
        }
    }




ついで。
protected
多分また詳しくやる
クラスを継承した派生クラス からアクセスできる

(private は派生クラスからアクセスできない)

ufcpp.net