C#构建
C# construction
我试图理解一个 Unity 示例脚本,并在示例中找到以下代码:
protected IEnumerator SmoothMovement(Vector3 end) {
float sqrRemainingDistance = (transform.position - end).sqrMagnitude;
while (sqrRemainingDistance > float.Epsilon) {
Vector3 newPosition = Vector3.MoveTowards(rb2d.position, end, inverseMoveTime * Time.deltaTime);
rb2d.MovePosition(newPosition);
sqrRemainingDistance = (transform.position - end).sqrMagnitude;
yield return null;
}
}
public abstract void OnCantMove <T> (T component)
where T : Component;
最后两行我真的没看懂。他们是什么意思,他们在做什么?
这是一个通用参数,带有一个约束,即任何传递给它的对象必须是 Component
类型
这两行定义了一个抽象方法,不返回任何内容并期望任意 Component
。任何实现抽象方法的 class 也应该实现这个抽象方法。
这只是一个方法签名。细分如下:
public abstract
一个public方法,必须在派生类
中重写
void
无return值
OnCantMove
方法名为 OnCantMove
<T>(T component)
它接受一个类型参数 T
,以及它正在调用 component
的类型 T
的一个实例。通常,如果编译器使用该类型的实例参数,那么当您调用此方法来自行计算类型参数时,编译器会足够聪明。所以有可能,你可以调用这个离开 <T>
参数。
where T : Component
类型参数 T
被限制为类型 Component
我试图理解一个 Unity 示例脚本,并在示例中找到以下代码:
protected IEnumerator SmoothMovement(Vector3 end) {
float sqrRemainingDistance = (transform.position - end).sqrMagnitude;
while (sqrRemainingDistance > float.Epsilon) {
Vector3 newPosition = Vector3.MoveTowards(rb2d.position, end, inverseMoveTime * Time.deltaTime);
rb2d.MovePosition(newPosition);
sqrRemainingDistance = (transform.position - end).sqrMagnitude;
yield return null;
}
}
public abstract void OnCantMove <T> (T component)
where T : Component;
最后两行我真的没看懂。他们是什么意思,他们在做什么?
这是一个通用参数,带有一个约束,即任何传递给它的对象必须是 Component
这两行定义了一个抽象方法,不返回任何内容并期望任意 Component
。任何实现抽象方法的 class 也应该实现这个抽象方法。
这只是一个方法签名。细分如下:
public abstract
一个public方法,必须在派生类
中重写void
无return值
OnCantMove
方法名为 OnCantMove
<T>(T component)
它接受一个类型参数 T
,以及它正在调用 component
的类型 T
的一个实例。通常,如果编译器使用该类型的实例参数,那么当您调用此方法来自行计算类型参数时,编译器会足够聪明。所以有可能,你可以调用这个离开 <T>
参数。
where T : Component
类型参数 T
被限制为类型 Component