当前位置: 首页 > 知识库问答 >
问题:

TypeScript-私有变量和受保护变量之间的区别

陈兴朝
2023-03-14

TypeScript中的privateprotected变量之间有什么区别?对于C 35;也存在类似的问题,但我不确定这两种语言中的概念是否相同。如果没有,了解这些差异将是有益的。

共有3个答案

公孙智
2023-03-14

protected在TypeScript中的工作方式与在C#中的工作方式非常相似。TypeScript发行版将其记录为:

类中新的受保护修饰符的工作方式与熟悉的语言(如C、C#和Java)中的一样。类的受保护成员仅在声明它的类的子类中可见

private只允许您访问即时类类型。私有成员对子类不可见。

梁学真
2023-03-14
匿名用户

私人方法:

当成员被标记为私有时,不能从其包含类之外访问它。

保护方法:

受保护修饰符的作用与私有修饰符非常相似,只是声明为受保护的成员也可以在派生类中访问。

关于受保护的变量,还有一个点要添加:

当基类变量受到保护时,我们不能直接从派生类使用它的变量。

例如:

class Car{
    protected name: string;
    constructor(name: string) { this.name = name; }
}

class Mercedes extends Car{
    private noOfWheels: number;

    constructor(name: string, noOfWheels: number) {
        super(name);
        this.noOfWheels= noOfWheels;
    }

    public getIntro() {
        return `Hello, This is my ${this.name} and I have ${this.noOfWheels} wheels.`;
    }
}

let myCar= new Mercedes ("COOL Car", 4);
console.log(myCar.getIntro());  //Hello, This is my COOL Car and I have 4 wheels.
console.log(myCar.name); // Error!! , Property 'name' is protected and only accessible within class 'Car' and its subclasses.

我们不能直接从Car类外部使用变量名,我们仍然可以从Mercedes的实例方法内部使用它,因为Mercedes源于Car。

嵇丰
2023-03-14

这与其他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;
    }
}

请注意,在classA中,可以同时访问(private)这两个属性。x和(受保护的)这个。y
但是在B类中,只有可以访问这个。y这个。x出现以下错误:

属性'x'是私有的,只能在类A中访问

(你可以在操场上看到错误)

但重要的是要理解,这只适用于typescript
在javascript中,任何引用该实例的人都可以访问这些成员。

 类似资料:
  • 问题内容: 此Java程序包含一个静态变量。但是我无法理解公共静态变量和私有静态变量之间的区别。 问题答案: 公共变量可在代码中的 任何 位置访问- 私有变量仅可在类本身内部访问。在这种情况下,您可以在类中使用它,所以很好。 请注意,静态变量是完全独立的问题-方法和类具有与变量相同的可访问性。 还有其他级别的访问权限- 和默认的“包”访问权限(无法明确指定)。有关更多详细信息,请参见Java语言规

  • 这个java程序包含一个静态变量。但是我不明白公共和私有静态变量之间的区别。

  • 问题内容: 我已经在Python的Stack Exchange上阅读了很多答案,为什么在类中使用“ self”? 阅读这些答案后,我了解到实例变量对于该类的每个实例都是唯一的,而在所有实例之间共享类变量。 在玩耍时,我发现这段代码给出了输出: 但是,此代码作为输出,在我看来应为: 为什么我运行时类变量没有更新?我没有编程方面的经验,所以请原谅。 问题答案: 类变量 被 实例属性 遮盖 。这意味着在

  • 我希望使用基于UML模型的genmodel生成Java代码。 我正在使用Papyrus的Eclipse Oxygen,UML模型(使用了一些Ecore配置文件),以便使用GenModel向导生成Ecore,最终生成模型Java代码(标准Eclipse插件)。 我已将生成的源代码与手写的源代码分开,因此将避免+手动修改解决方案:) null

  • 问题内容: 请帮助我理解常量变量和Java变量之间的区别。我对此有些困惑。 问题答案: 常量 是概念,是变量的属性。 是用于声明常量变量的java关键字。 正如其他人所指出的那样,从语义/语言的观点来看, 常量变量 的表达是矛盾的,因此,我们可以争论其正确性。 引用规范,无论如何,我们可以阅读 原始类型的最终变量,并使用编译时常数表达式(第15.28节)进行了初始化,称为 常量变量 。 因此,我想

  • 问题内容: 我是Java编程的新手。谁能说出Java中的全局变量和局部变量之间的区别? 问题答案: 您的问题有点困惑,因为您在标题中引用的是static / global,而在问题中引用的是global / local。 变量绑定到一个 类 , 每个类 将有 一个实例 。 类可以具有成员变量,并且该类的 每个实例 将有 一个实例 。 请注意,如果您有多个类加载器,这将变得更加复杂。在这种情况下,您