Портирование кода C#. Это ссылка на глобальный объект?

Я пытаюсь перенести библиотеку Aether.Physics2D с C# на Xojo. По сути, это измененная версия физического движка Farseer. В основном это сделано, но есть одна часть исходного кода, которую я не могу обработать (возможно, потому, что C# не является моим основным языком).

В Dynamics/Contacts/Contact.cs есть несколько ссылок на то, что выглядит как глобальный объект Collision, но я не могу найти его определение. Например, в строке 405 в switch:

case ContactType.Polygon:
  Collision.Collision.CollidePolygons(ref manifold, (PolygonShape)FixtureA.Shape, ref transformA, (PolygonShape)FixtureB.Shape, ref transformB);
  break;

Я уже портировал класс Collision и его статический метод CollidePolygons (определенный здесь), но почему этот код не просто:

Collision.CollidePolygons(ref manifold, (PolygonShape)FixtureA.Shape, ref transformA, (PolygonShape)FixtureB.Shape, ref transformB);

Вместо:

Collision.Collision.CollidePolygons(ref manifold, (PolygonShape)FixtureA.Shape, ref transformA, (PolygonShape)FixtureB.Shape, ref transformB);

По сути, почему два Collision вызова?

Любая помощь приветствуется.


person Garry Pettet    schedule 19.04.2019    source источник
comment
Пожалуйста, дайте ссылку на декларацию Collision.   -  person Chayim Friedman    schedule 19.04.2019
comment
github.com/tainicom/Aether.Physics2D/blob/ мастер/Physics2D/   -  person Garry Pettet    schedule 19.04.2019


Ответы (1)


Нет, это просто потому, что это класс с именем Collision в пространстве имен с именем Collision:

namespace tainicom.Aether.Physics2D.Collision
{
    public static class Collision
    {
    }
}

Если вы все равно переносите код, я настоятельно рекомендую вам исправьте эту ошибку.

Вы также можете изменить код вызова с помощью директивы using:

using Collision = tainicom.Aether.Physics2D.Collision.Collision;
...
// Calling the method is simpler now
Collision.CollidePolygons(...);

На самом деле вы можете указать для своего псевдонима другое имя:

// TODO: Think of a better name to use :)
using CollisionClass = tainicom.Aether.Physics2D.Collision.Collision;
...
CollisionClass.CollidePolygons(...);

Таким образом, имя Collision вообще не меняет своего значения, но вам не нужно нигде использовать Collision.Collision.

person Jon Skeet    schedule 19.04.2019