2016-04-25 9 views
6

TypeScriptの変数privateprotectedの違いは何ですか? C#についても同様の質問がありますが、2つの言語の概念が同一であるかどうかはわかりません。もしそうでなければ、違いを知ることは有益でしょう。TypeScript - プライベート変数とプロテクト変数の違い

+0

@JoeClayこれはC#用です。 TypeScriptの答えはほとんど "正解"ですが、そこにはTypeScriptにはないアクセス修飾子も書かれています。 – vcsjones

+0

@vcsjones:それは公正な点です。答えのC#固有の部分がそれらを混乱させる可能性があります。フラグを削除します。 –

答えて

3

protectedは、C#と非常によく似たTypeScriptで動作します。 TypeScript release notesのような、それを文書化:だけすることができます

The new protected modifier in classes works like it does in familiar languages like C++, C#, and Java. A protected member of a class is visible only inside subclasses of the class in which it is declared

privateのに対し、あなたはすぐにクラス型へのアクセス権を持っています。プライベートメンバーはサブクラスには表示されません。

15

他のOO言語と同じです。
プライベートメソッド/メンバーには、クラス内部からのみアクセスできます。
保護されたメソッド/メンバーには、クラスと拡張クラスの内部からアクセスできます。

class A { 
    private x: number; 
    protected y: number; 

    constructor(x: number, y: number) { 
     this.x = x; 
     this.y = y; 
    } 

    getX(): number { 
     return this.x; 
    } 

    getY(): number { 
     return this.y; 
    } 
} 

class B extends A { 
    multiply(): number { 
     return this.x * this.y; 
    } 
} 

クラスAの両方で(プライベート)this.xと(保護)this.yへのアクセスがあることに注意してください。
しかし、クラスBthis.ythis.xへの唯一のアクセスがあります。このエラーがあります:

Property 'x' is private and only accessible within class A

(あなたがplaygroundでエラーを見ることができます)

どうかの理解することが重要ですが、これは活字体しか真実であるということです。
JavaScriptでこれらのメンバーには、インスタンスへの参照を持つすべての人がアクセスできます。

関連する問題