2016-04-25 170 views
6

TypeScript中privateprotected變量之間的區別是什麼? C#存在類似的問題,但我不確定兩種語言的概念是否相同。如果不是,那麼瞭解這些差異將會很有用。TypeScript - 私有變量和受保護變量之間的區別

+0

@JoeClay這是C#。儘管大多數TypeScript的答案都是「正確的」,但其中的答案還記錄了TypeScript沒有的訪問修飾符。 – vcsjones

+0

@vcsjones:這是一個公平點,答案的C#特定部分可能會混淆它們。將刪除該標誌。 –

回答

3

protected在TypeScript中工作非常類似於它從C#中所做的。該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

這與其他面嚮對象語言相同。
私人方法/成員只能從課堂內部訪問。
受保護的方法/成員可以從課程內部訪問,也可以擴展課程。

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
但在B類有隻this.ythis.x訪問有此錯誤:

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

(你可以看到錯誤playground

瞭解什麼是重要的是,雖然這只是真實的打字稿。
在JavaScript中,任何人都可以通過參考實例訪問這些成員。

相關問題