namespace hi
{
class hithere
{
public int numberOne = 12;
private int numberTwo = 12;
static void yo()
{
}
}
}
このコードでは、numberOneとnumberTwoという変数の違いを教えてもらえますか?公的変数と私的変数の違い
namespace hi
{
class hithere
{
public int numberOne = 12;
private int numberTwo = 12;
static void yo()
{
}
}
}
このコードでは、numberOneとnumberTwoという変数の違いを教えてもらえますか?公的変数と私的変数の違い
パブリック変数は、アウト側のクラスからアクセス可能であるが、現在のクラスと内部クラスのためだけにアクセスプライベート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);
}
}
他のオブジェクトはNumberOneにアクセスできますが、numberTwoにはアクセスできません。
だから私はYour_Object.numberOne = 14;
を行うことができますが、私はYour_Object.numberTwo= 14;
今私は、アプリケーションで設定したアクセス権に応じて、反射によりnumberTwoにアクセスすることができるかもしれませんが、私は直接することはできませんを行うことはできません。一般に
Variables in C#
Reflection in C#
、PUBLICは、クラス外の他のコードがその値を変更できることを意味します。 PRIVATEはクラス自体でのみ使用/変更することができます。さらに、別のクラスから派生したクラスを作成し、そのクラスの外にある他の汎用コードではなく、その親の値を使用したり変更したりできるようにするには、PROTECTEDを使用します。
MSDNでaccessibility levelsから:アクセスが制限されていない
公共。
保護アクセスは、包含するクラス から派生したクラスを含むものに限定されます。
内部アクセスは現在のアセンブリに限定されています。
保護された内部アクセスは、現在のアセンブリまたは含有 クラスから派生したタイプに制限されます。
プライベートアクセスは含むタイプに制限されています。
public
およびprivate
は、メンバーのアクセス修飾子です。これは、コードを介してメンバーに直接アクセスできるユーザーを指します。 public
は、誰もがコードを通じて直接メンバーにアクセスできるようにアクセスが制限されていないことを意味します。 private
は、アクセスが含まれるクラスのみに制限されることを意味します。誰もが直接コードを通じてnumberOne
にアクセスできますが、コードを直接含むクラスはnumberTwo
にアクセスできます。
public
:
は5つのアクセス修飾子の中の選択肢の一つですアクセスが
protected
限定されるものではない:アクセス:アクセスが含まれているクラス
internal
から派生含むクラスまたはクラスに限定されています含まれているアセンブリに限定されています
protected internal
:protected
とのORですアクセスが含まれているクラスまたは含むクラスOR含むアセンブリ
private
から派生したクラスに制限されるように:アクセスは「直接コードから」句はここに重要であることを
注含むクラスに制限されています;リフレクションを使用してこれらのメンバーにアクセスすることは可能です。
C#仕様の関連セクションは§3.5、特に§3.5.2です。
'private:アクセスは定義されたクラスに限定されています。 'いいえ、また内部クラス –
@Saeed:それは定義クラス内です。 – jason
MSDNのように 'contains type'と言うのは変数の定義者ではないからです。 –
「カプセル化」を検索してください。 それを研究するのは非常に簡単な資料があります。
最も簡単な用語では、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
クラスのインスタンスを作成することはできません。
それはあなたがこのような別のクラスがある場合ことを意味します
namespace hi
{
class hithere2
{
static void yo2()
{
hithere h = new hithere();
h.numberOne = 2;
h.numberTwo = 3;
}
}
}
2番目の1つのエラーが、最初はOKです。
ああ、このユーザーから自分の名前を変更するにはどうすればいいですか?######### stuff? – DarkLightA
あなたのプロフィールを編集します。 –
ありがとうございます。そのようなユーザー名を持つことには慣れていません。 – DarkLightA