精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在dart實例化類class

CHANBAEK ? 來源:myfreax ? 作者:myfreax ? 2022-12-05 16:55 ? 次閱讀

Dart是面對象編程語言并且是基于mixin的繼承方式。這意味著Dart不能繼承多個類。

每個對象都是class類的實例,并且除了Null不是對象之外,其它對象都是Object派生對象。

基于Mixin的繼承意味著每個類只有一個父類,一個類可以在多個類的主體中被重用,但Object對象除外。

Dart的擴展方法 Extension methods使你可以在不改變class類或者創建子類的情況下添加函數到類class。

在本教程中,我們將會說明如何在dart實例化類class,打印對象數據類型,初始化實例變量,訪問實例變量。

Class類的成員

對象的成員由函數和數據,有時也成為方法與實例變量組成。當你調用一個方法時,是在一個對象上調用它。該方法可以訪問對象的功能和數據。

你可以使用點符號.訪問實例的變量和方法。當訪問的屬性可能為null空時,請使用?.代替.

var p = Point(2, 2);

// 訪問p對象y實例變量.
assert(p.y == 2);

// 在對象p調用distanceTo()方法.
double distance = p.distanceTo(Point(4, 4));
// If p is non-null, set a variable equal to its y value.
var a = p?.y;

dart class實例化

你可以創建一個對象使用構造函數,構成函數的名稱可以是類名ClassName或者ClassName.identifier

例如下面的代碼創建Point 對象,使用Point()Point.fromJson() 構造函數。

你也可以使用可選的new調用構造函數創建對象,通常沒有人會使用new關鍵詞創建對象。

var p1 = Point(2, 2);
var p2 = Point.fromJson({'x': 1, 'y': 2});

var p1 = new Point(2, 2);
var p2 = new Point.fromJson({'x': 1, 'y': 2});

某些class類會提供一個常量構造函數,它可用于創建編譯常量。要創建常量構造函數,請將const關鍵詞放在構造函數名稱的前面。

當創建兩個同樣的編譯時常量,它們的實例是一樣的。在常量的上下文,構造函數或者字面量可以省略const關鍵詞。

您可以僅使用一次const關鍵詞,在變量的前面添加const關鍵詞創建常量的上下文。

var a = const ImmutablePoint(1, 1);
var b = const ImmutablePoint(1, 1);

assert(identical(a, b)); // 它們是同一個實例
// 這種方式使用非常多的常量關鍵詞
const pointAndLine = const {
  'point': const [const ImmutablePoint(0, 0)],
  'line': const [const ImmutablePoint(1, 10), const ImmutablePoint(-2, 11)],
};

// 使用const關鍵詞創建常量上下文
const pointAndLine = {
  'point': [ImmutablePoint(0, 0)],
  'line': [ImmutablePoint(1, 10), ImmutablePoint(-2, 11)],
};

如果常量構造函數在常量的上下文外部并且在調用的時候沒有使用const關鍵詞,它會創建一個非常量的對象。

var a = const ImmutablePoint(1, 1); // 創建一個常量
var b = ImmutablePoint(1, 1); // 不會創建常量

assert(!identical(a, b)); // 兩個不同實例

Dart 打印對象數據類型

要在運行時獲得一個對象的類型,你可以訪問ObjectruntimeType屬性,它會返回對象的類型。

要測試一個對象的類型請使用類型測試操作符,而不是ObjectruntimeType屬性。

產品環境,測試對象類型的語句是object is Typeobject is Type 會比object.runtimeType == Type更穩定。

print('The type of a is ${a.runtimeType}');

// is 
if(a is Stream){
  print
}

實例變量

class Point {
  double? x; // 聲明instance x,初始值是空null
  double? y; // 聲明instance y,初始值是空null
  double z = 0; // 聲明instance z,初始值是空null
}

在Dart,所有未初始化的實例變量是的值是空null。所有實例變量都會有一個隱式getter方法*。*

非最終Non-final實例變量和late final實例變量即使沒有被初始化也會生成一個隱式的setter方法,更多詳細的信息請參考Getters and setters。

如果初始化一個非late實例變量,值會在創建實例的時候被創建。在late實例變量初始化之前構造函數和初始化列表會先被執行。

class Point {
  double? x; // 聲明實例變量 x,初始值是空 null
  double? y; // 聲明實例變量 y,初始值是空 null
}

void main() {
  var point = Point();
  point.x = 4; // 使用x的setter方法
  assert(point.x == 4); // 使用x的getter方法
  assert(point.y == null); // 值默認是null.
}

實例的變量可以是final,這種情況下final的實例變量必須初始化。要初始化final, 非late實例變量。

請使用構造函數的參數或者使用構造函數的初始化列表。如果你需要在構造函數的主體之后初始化一個final的實例變量。

你可以工廠構造函數或者使用late final。在使用late final的時候要小心,late final沒有初始化器添加到API

class ProfileMark {
  final String name;
  final DateTime start = DateTime.now();

  ProfileMark(this.name);
  ProfileMark.unnamed() : name = '';
}

結論

至此,你已經了解dart class的成員組成,dart class實例化,打印對象數據類型,初始化實例變量,訪問實例變量。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程語言
    +關注

    關注

    10

    文章

    1938

    瀏覽量

    34594
  • 函數
    +關注

    關注

    3

    文章

    4304

    瀏覽量

    62428
  • Class
    +關注

    關注

    0

    文章

    53

    瀏覽量

    19712
  • Dart
    +關注

    關注

    0

    文章

    9

    瀏覽量

    1742
收藏 人收藏

    評論

    相關推薦

    SystemVerilog中的參數

    類似于聲明一個參數的module,我們也可以聲明一個參數class。這個參數可以用來實例不同數值和類型的對象。
    發表于 12-01 09:09 ?2508次閱讀

    何在tc377啟動軟件時檢查SSH實例的內存是否已初始

    我有一個關于 SSH 內存初始的問題。 問題是:如何在 tc377 啟動軟件時檢查 SSH 實例的內存是否已初始? 謝謝。
    發表于 05-22 06:48

    Altium19如何在Class中創建,并修改其對應走線顏色

    一. 我們在進行PCB設計的時候,一個PCB板上的信號線,電源線,地線等等太多了。那我們給它分成一的,就是我們常說的在Class中創建的了。我們創建
    發表于 11-26 11:26

    如何使用Python的? 優勢有哪些?

    。  2.實例一個是通過在名后面加小括號“()”來實現的:  pupil=Student ()  “小學生”是“學生”這個的一個實例
    發表于 07-30 18:08

    請問如何在Vivado項目中實例hdl系統生成器輸出的多個實例

    嗨,如何在Vivado項目中實例hdl系統生成器輸出的多個實例?在vivado項目中很容易實例
    發表于 07-31 10:38

    何在VHDL代碼中實例LVDS緩沖區嗎?

    嗨,我正在為VC707eval板實現一個簡單的VHDL程序,并且很難使用系統時鐘。時鐘是LVDS 200 Hz時鐘。我在XDC文件中定義了SYSCLK_P / _N引腳。需要在代碼中實例差分輸入和輸出緩沖區。你知道如何在VHD
    發表于 08-14 09:08

    加載的時機和過程

    加載機制把class文件加載到內存,并對數據進行校驗,準備,解析,初始,形成可以被虛擬機直接使用的字節碼加載的時機(觸發的初始
    發表于 11-04 06:16

    python的理解與使用

    新式的寫法,與之對應的是 Python 2 的經典寫法。3. 如何實例?定義了之后,就可以通過下邊的寫法
    發表于 03-07 16:51

    python的繼承

    ): def __init__(self, name, age, weight, grade):# 調用父實例方法People.__init__(self, name, age, weight
    發表于 03-08 16:40

    D放大器設計實例,Class D amplifier design example

    D放大器設計實例,Class D amplifier design example 關鍵字:D放大器,D
    的頭像 發表于 09-20 19:12 ?1226次閱讀

    C++封裝:的作用域和實例

    C++封裝:的作用域和實例
    的頭像 發表于 06-29 14:28 ?3541次閱讀
    C++封裝:<b class='flag-5'>類</b>的作用域和<b class='flag-5'>實例</b><b class='flag-5'>化</b>

    box2d.dart Dart版的Box2D

    ./oschina_soft/box2d.dart.zip
    發表于 05-31 11:29 ?0次下載
    box2d.<b class='flag-5'>dart</b> <b class='flag-5'>Dart</b>版的Box2D

    參數Class中的靜態屬性

    static屬性一般是在編譯的時候就已經分配了內存,并被這個的所有實例共享, 也就是在仿真時刻0之前就已經完成了靜態屬性的內存分配。 但是,參數中的靜態屬性可能有所區
    的頭像 發表于 12-02 09:17 ?1219次閱讀

    dart語言的變量聲明與初始

    變量是每一們語言的基礎,在Dart中所有變量都是對象,并且都有一個初始的值null。
    的頭像 發表于 12-08 16:47 ?1226次閱讀

    何在普通中使用內部結構

    訪問 public void fun ( ) { Inner in = new Inner(); //實例內部類的對象 in .print(); } //在Outer中的內部類 class
    的頭像 發表于 10-10 16:26 ?404次閱讀