2010-12-14 4 views
2
namespace hi 
{ 
    class hithere 
    { 
     public int numberOne = 12; 
     private int numberTwo = 12; 

     static void yo() 
     { 
     } 
    } 
} 

このコードでは、numberOneとnumberTwoという変数の違いを教えてもらえますか?公的変数と私的変数の違い

+0

ああ、このユーザーから自分の名前を変更するにはどうすればいいですか?######### stuff? – DarkLightA

+2

あなたのプロフィールを編集します。 –

+0

ありがとうございます。そのようなユーザー名を持つことには慣れていません。 – DarkLightA

答えて

1

パブリック変数は、アウト側のクラスからアクセス可能であるが、現在のクラスと内部クラスのためだけにアクセスプライベート1:

public class VarClass 
{ 
    public int publicID = 10; 
    private int privateID = 100; 
    public VarClass() 
    { 
     Console.WriteLine(publicID); 
     Console.WriteLine(privateID); 
    } 

    public class InnerClass 
    { 
     public InnerClass() 
     { 
      VarClass c = new VarClass(); 
      Console.WriteLine(c.privateID); 
      Console.WriteLine(c.publicID); 
     } 
    } 
} 

public class OuterClass 
{ 
    public OuterClass() 
    { 
     VarClass c = new VarClass(); 
     Console.WriteLine(c.privateID); // Compile Error 
     Console.WriteLine(c.publicID); 
    } 
} 
2

他のオブジェクトはNumberOneにアクセスできますが、numberTwoにはアクセスできません。

だから私はYour_Object.numberOne = 14;を行うことができますが、私はYour_Object.numberTwo= 14;

今私は、アプリケーションで設定したアクセス権に応じて、反射によりnumberTwoにアクセスすることができるかもしれませんが、私は直接することはできませんを行うことはできません。一般に

Variables in C#
Reflection in C#

Accessors in C#
0

、PUBLICは、クラス外の他のコードがその値を変更できることを意味します。 PRIVATEはクラス自体でのみ使用/変更することができます。さらに、別のクラスから派生したクラスを作成し、そのクラスの外にある他の汎用コードではなく、その親の値を使用したり変更したりできるようにするには、PROTECTEDを使用します。

5

MSDNaccessibility levelsから:アクセスが制限されていない

公共

保護アクセスは、包含するクラス から派生したクラスを含むものに限定されます。

内部アクセスは現在のアセンブリに限定されています。

保護された内部アクセスは、現在のアセンブリまたは含有 クラスから派生したタイプに制限されます。

プライベートアクセスは含むタイプに制限されています。

0

publicおよびprivateは、メンバーのアクセス修飾子です。これは、コードを介してメンバーに直接アクセスできるユーザーを指します。 publicは、誰もがコードを通じて直接メンバーにアクセスできるようにアクセスが制限されていないことを意味します。 privateは、アクセスが含まれるクラスのみに制限されることを意味します。誰もが直接コードを通じてnumberOneにアクセスできますが、コードを直接含むクラスはnumberTwoにアクセスできます。

public

は5つのアクセス修飾子の中の選択肢の一つですアクセスが

protected限定されるものではない:アクセス:アクセスが含まれているクラス

internalから派生含むクラスまたはクラスに限定されています含まれているアセンブリに限定されています

protected internalprotectedとのORですアクセスが含まれているクラスまたは含むクラスOR含むアセンブリ

privateから派生したクラスに制限されるように:アクセスは「直接コードから」句はここに重要であることを

注含むクラスに制限されています;リフレクションを使用してこれらのメンバーにアクセスすることは可能です。

C#仕様の関連セクションは§3.5、特に§3.5.2です。

+0

'private:アクセスは定義されたクラスに限定されています。 'いいえ、また内部クラス –

+0

@Saeed:それは定義クラス内です。 – jason

+0

MSDNのように 'contains type'と言うのは変数の定義者ではないからです。 –

0

「カプセル化」を検索してください。 それを研究するのは非常に簡単な資料があります。

1

最も簡単な用語では、numberOneは公開とマークされているため、hithereクラスのインスタンスを作成すると、このメンバ変数にアクセスできます。例:プライベートであること

hithere h = new hithere() 
h.numberOne = 42; 

numberTwoが、これはアクセスできませんとだけhithereクラス内で使用できることを意味します。だから、さらに、上記の例を取る:

hithere h = new hithere() 
h.numberOne = 42; 
h.numberTwo = 84; 

これがプライベートであるとして、あなたがnumberTwoにアクセスすることができないとして最後の行は、コンパイルエラーが発生します。

それはおそらくアクセス修飾子にまで読んでいくつかの時間を費やす価値がある、簡単にGoogleは、例えば、多くの例があります:

http://www.devsource.com/c/a/Techniques/Understanding-C-Class-and-Member-Modifiers/ http://msdn.microsoft.com/en-us/library/ba0a1yw2 %28v =対80%29.aspx

さらに、hithereクラスにはアクセス修飾子が定義されていないため、コンパイラはこれをプライベートと見なします。したがって、ライブラリを別のライブラリから参照する場合は、hithereクラスのインスタンスを作成することはできません。

0

それはあなたがこのような別のクラスがある場合ことを意味します

namespace hi 
{ 
    class hithere2 
    { 
     static void yo2() 
     { 
      hithere h = new hithere(); 
      h.numberOne = 2; 
      h.numberTwo = 3; 
     } 
    } 
} 

2番目の1つのエラーが、最初はOKです。

関連する問題