Использовать «есть» или «как» в этом случае? - PullRequest
0 голосов
/ 10 января 2011

У меня есть эти интерфейсы:

public interface IBaseInterface
{
    function Method():void:
}

public interface IExtendedInterface extends IBaseInterface
{
    function MethodTwo():void;
}

... и вектор типа "IBaseInterface", который мне нужно перебрать:

var myVector:Vector.<IBaseInterface> = new Vector.<IBaseInterface>();

Мне нужно выполнить операцию надобъекты, которые используют IExtendedInterface.Какой вариант предпочтительнее?

for each(var obj:IBaseInterface in myVector)
{
    // Option 1:
    var tmp:IExtendedInterface = obj as IExtendedInterface;

    if(tmp != null)
        tmp.MethodTwo();

    // Option 2:
    if(obj is IExtendedInterface)
        IExtendedInterface(obj).MethodTwo();
}

Я уверен, что информация, которую я ищу, там, просто сложно найти "есть" и "как" ... Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 13 января 2011

Как говорит Weltraumpirat, вариант 1 быстрее,

Но если вы работаете над своим собственным кодом, и никто больше не будет его трогать, тогда продолжайте.

Но если это совместная работа команды, и вы не собираетесь запускать операцию 100 000 раз с критически важной задачей для миллисекундных временных интервалов, тогда вариант 2 намного проще для того, кто просматривает ваш код.

Особенно важно, если вы передаете свой код клиенту для дальнейшей разработки.

1 голос
/ 11 января 2011

Я попробовал небольшой тест, чтобы выяснить, какой из них быстрее, ожидая, что вариант «как» будет немного лучше, потому что назначение переменной и проверка на ноль кажутся менее сложными, чем сравнение типов (оба варианта включают приведение типов)и было доказано правильно.

Разница, однако, минимальна: при 100000 итерациях каждая опция 1 была примерно на 3 миллисекунды (!) Быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...