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

类型

Constraints on Type Parameters

这两行定义了一个抽象方法,不返回任何内容并期望任意 Component。任何实现抽象方法的 class 也应该实现这个抽象方法。

这只是一个方法签名。细分如下:

public abstract

一个public方法,必须在派生类

中重写

void

无return值

OnCantMove

方法名为 OnCantMove

<T>(T component)

它接受一个类型参数 T,以及它正在调用 component 的类型 T 的一个实例。通常,如果编译器使用该类型的实例参数,那么当您调用此方法来自行计算类型参数时,编译器会足够聪明。所以有可能,你可以调用这个离开 <T> 参数。

where T : Component

类型参数 T 被限制为类型 Component