gpt4 book ai didi

dart - 语言上的一些错误

转载 作者:行者123 更新时间:2023-12-03 03:39:55 24 4
gpt4 key购买 nike

我是Dart的新手,我想精确说明这一点。我在Dart中创建了两个类,一个是“Person”,另一个是第一个的 child ,它被命名为“Employee”。
我创建一个Person对象。当我将此对象更改为Employee类的Instance时,没有错。但是在我询问Employee内部的参数时,我提出了一个错误。

那么,为什么Dart允许我访问对象的类,却不允许我访问新类内部的参数?

下面的代码:

void main {
var person = Person(name: "Zozor");
print(person.describe());
person = Employee(taxCode: 'AAB');
person.sayName();
print(person.taxCode);
}

class Person {
Person({this.name, this.age, this.height});
String name;
final int age;
final double height;
String describe() => "Hello, I'm ${this.name}. I'm ${this.age} and I'm ${this.height} meter${this.height == 1 ? '':'s'} tall";
void sayName()=> print("Hello, I'm ${this.name}.");
}

class Employee extends Person {
Employee({String name, int age, double height, this.taxCode, this.salary}) : super(name:name, age: age, height: height);
final String taxCode;
final int salary;
}

最佳答案

Dart中的变量必须在使用前声明。它们具有类型,并存储对该值的引用(请参见https://www.tutorialspoint.com/dart_programming/dart_programming_variables.htm)。

var person = Person(name: "Zozor");

声明类型为Person的变量person(类型是从其初始化为的类的类型派生的)。

分配时:
person = Employee(taxCode: 'AAB');

分配的类型不变(即仍然为Person),只有引用更改为将Employee向下转换为Person的结果(向下转换是按 https://news.dartlang.org/2012/05/types-and-casting-in-dart.html所述隐式完成的)。

以上是由于var创建静态类型变量。
一种替代方法是使用动态类型,如下所示:
dynamic person = Person(name: "Zozor");

这将声明一个类型为动态的人员变量。现在,当分配给员工时:
person = Employee(taxCode: 'AAB');

人员变量的类型现在是Employee而不是Person。此外,没有雇员下垂的情况,也没有与taxCode相关的错误消息。

保持静态(而不是使用动态)的一种简单方法是使用人员的显式重铸到Employee:
print((person as Employee).taxCode);

这将一个人投给Employee,然后获得taxCode。

关于dart - 语言上的一些错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57749352/

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