簡體   English   中英

TypeScript 中 c# 類虛擬成員的等價物

[英]Equivalent of c# class virtual member in TypeScript

因此,在 C# 中,當我創建模型類和延遲加載時,我會執行以下操作:

public int? User_ID { get; set; }
public int? Dept_ID { get; set; }

然后在我的班級再往下一點,我像這樣彈出我的虛擬機:

public virtual User User {get; set;}
public virtual Department Dept {get; set;}

我將如何在 Typescript 中執行此操作? 像這樣的東西?:

User_ID: number;
Dept_ID: number;
User: User;
Dept: Department;

我不認為接口是我想要/需要的......但是再次受保護似乎也不正確。 有些東西告訴我我在這里錯過了一個明顯的答案。

以下同樣適用於 TypeScript 和 JavaScript:

沒有等價物。

JavaScript 中的每個成員訪問都根據定義進行動態調度。 這是因為 JavaScript 中的成員訪問在道德上是在哈希表中的鍵查找。

一個對象可以聲明一個成員與它通過原型鏈繼承的成員具有相同的鍵,從而隱藏被繼承的成員,但這與虛擬性不同,虛擬性是語言中不存在的概念。

是的,有..

//non-abstract or abstract class
class A {
    
    // The virtual method
    protected virtualStuff1?():void;

    public Stuff2(){
        //Calling overridden child method by parent if implemented
        this.virtualStuff1 && this.virtualStuff1();
        alert("Baseclass Stuff2");
    }
}

//class B implementing virtual method
class B extends A{
    
    // overriding virtual method
    public virtualStuff1()
    {
        alert("Class B virtualStuff1");
    }
}

//Class C not implementing virtual method
class C extends A{
 
}

var b1 = new B();
var c1= new C();
b1.Stuff2();
b1.virtualStuff1();
c1.Stuff2();

我使用箭頭函數作為類的屬性實現了這一點(注意這是在 ts 中,但如果你在現代 js 中很方便,它應該可以工作):

class baseClass {
    doSomething = () => {};
}

class derivedClass extends baseClass {
    constructor() {
        this.doSomeThing = () => { console.log('something'); };
    }
}

Javascript 和 Typescript 中的所有方法在技術上都是虛擬的,因為沒有什么可以阻止您覆蓋任何方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM