gpt4 book ai didi

namespaces - 你如何命名一个 Dart 类?

转载 作者:行者123 更新时间:2023-12-03 10:48:58 25 4
gpt4 key购买 nike

如何为 Dart 类创建命名空间?我来自 C# 背景,我只会使用 namespace SampleNamespace { } .

你如何在 Dart 中达到同样的效果?

最佳答案

Dart 没有命名空间的概念,但它有库。您可以认为库在某种程度上等同于命名空间,因为库可以由多个文件组成,并包含多个类和函数。

Dart 中的隐私也在库中,而不是在类级别(任何带有下划线前缀的东西都是该库私有(private)的)。

定义库的示例(使用实用程序库的示例:

// utilities.dart
library utilities; // being the first statement in the library file

您可以使用 part 使其他文件成为同一库的一部分。关键词。零件文件仅用于帮助组织您的代码;您可以将所有类放在一个库文件中,或者将它们拆分为几个部分文件(或部分文件和库文件) - 它对执行没有影响。将主库文件放在父文件夹中,将部分文件放在 src/ 中是一种风格。文件夹。

扩展示例以显示零件文件。

// utilities.dart
library utilities;

part "src/string_utils.dart";
part "src/date_utils.dart";

然后这些部分文件通过使用 part of 链接回它们所属的库。陈述:

// src/string_utils.dart
part of utilities;

// functions and classes
String reverseString(s) => // implementation ....

String _stringBuilder(strings) => // a private (to the library) function,
// indicated by the leading underscore

//... snip other classes and functions

现在你有了一个包含函数的库,你可以通过 import 在别处使用该库。图书馆:

 // my_app.dart;
import "path/to/library/utilities.dart";

main() {
var reversed = reverseString("Foo");
// _stringBulider(["a","b"]); // won't work - this function is
// only visible inside the library
}

如果你想给你的库起别名以避免冲突(你可能会导入两个库,都包含一个 reverseString() 函数,你使用 as 关键字:

 // my_app.dart;
import "path/to/library/utilities.dart";
import "some/other/utilities.dart" as your_utils;

main() {
var reversed = reverseString("Foo");
var your_reversed_string = your_utils.reverseString("Bar");
}

import 语句还使用了由 Dart 的包管理器 pub 导入的包,因此您也可以在 github 或其他地方托管您的库,并像这样引用您的库:

 // my_app.dart;
import "package:utilities/utilities.dart";

main() {
var reversed = reverseString("Foo");
}

pub 依赖在 pubspec.yaml 中定义。文件,它告诉 pub 在哪里可以找到库。您可以在 pub.dartlang.org 了解更多信息

需要注意的是,只有库文件可以:
  • 包含 import陈述。零件文件不能。
  • 包含 library关键词。零件文件不能。
  • 包含 part文件。零件文件不能。

  • 最后一点是,可运行的应用程序文件可以(并且很可能是)库文件,也可以由部分文件组成

     // my_app.dart;
    library my_app;

    import "package:utilities/utilities.dart";

    part "src/edit_ui.dart";
    part "src/list_ui.dart";
    part "src/foo.dart";

    main() {
    var reversed = reverseString("Foo");
    showEditUi(); // perhaps defined in edit_ui.dart....?
    }

    关于namespaces - 你如何命名一个 Dart 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13876879/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com