2017-05-01 3 views
-2

、C#で修飾せずにインスタンス変数と変数の違いは何なの次のコードで

public class Foo 
{ 
    private object first; 

    object second; 

    public void Bar() 
    { 
    first = "1234"; 

    second = "1234"; 
    } 
} 

2つの宣言の違いは何ですか?私はOOPに新たなんだとの違いだろうと思いまして...

おかげ

+2

差。あなたがアクセス修飾子を宣言していないので暗黙のうちにプライベートです。 [Default Visibility for C#](http://stackoverflow.com/questions/3763612/default-visibility-for-c-sharp-classes-and-members-fields-methods-etc)を参照してください。 – mason

+0

言語を学ぶために使用しているリソースの次のページに移動します。それはそれがあなたに言うところです。 –

答えて

2

2つの宣言の違いは何ですか?

Nothing、これはC#です。一般に、アクセス修飾子を使用せずにC#で何かを宣言した場合、それはその場所に対して最もプライベートな有効なアクセス修飾子を使用することと同等です。他の人はできるだけ簡潔であることを好む -

private object first; 

を宣言

そうですが、私はアクセス修飾子について、明示的であることを好む、個人的に

object first; 

に相当します。


これに対する唯一の例外は、プロパティの一部ためのアクセス修飾子を指定しています。それは財産そのものよりもプライベートでなければならない。そこにアクセス修飾子を指定しなければ、それは暗黙的にプロパティ自体と同じアクセスです。

0

これは重複としてマークされますが、とにかく回答します。

これらはどちらも、定義するクラスのインスタンス変数です。これらは、このクラスのインスタンスが作成されるときにのみメモリ内に存在します。

これら2つの変数には違いはありません。デフォルトでは、アクセス修飾子を持たないクラス/構造体メンバはprivateであり、privateであり修飾子を使用していないことを明示的に示していますが、常にメンバー/メソッドに対して許可するアクセスを指定することをお勧めします。

+0

"既定では、アクセス修飾子のない属性はプライベートです" - 1)MSDNのように "属性"の代わりに "メンバ"という用語を使用する必要があります。属性はC#ではまったく異なるものです。2)[ここ](https://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx)を参照してください。クラスメンバーと構造体メンバーだけがデフォルトで 'private'に設定されていますが、答えはこれを明確に述べておらず、問題を引き起こす可能性があります。 – Quantic

+0

@Quantic明確にするために編集されました。彼は列挙型やインタフェースを参照していないので、私は具体的にする必要はないと思っていました。 – RH6

関連する問題