Условная компиляция XAML

Внутренний класс связан с экземпляром внешнего класса и есть два специальных вида: Локальный класс и Анонимный класс . Анонимный класс позволяет нам объявлять и создавать экземпляр класса одновременно, поэтому делает код кратким. Мы используем их, когда нам нужен локальный класс только один раз, поскольку у них нет имени.

Рассмотрим пример из doc , где мы имеем класс Person:

public class Person {

    public enum Sex {
        MALE, FEMALE
    }

    String name;
    LocalDate birthday;
    Sex gender;
    String emailAddress;

    public int getAge() {
        // ...
    }

    public void printPerson() {
        // ...
    }
}

, и у нас есть способ печати элементов, которые соответствуют критериям поиска:

public static void printPersons(
    List roster, CheckPerson tester) {
    for (Person p : roster) {
        if (tester.test(p)) {
            p.printPerson();
        }
    }
}

, где CheckPerson - это интерфейс, такой как:

interface CheckPerson {
    boolean test(Person p);
}

Теперь мы можем использовать анонимный класс, который реализует этот интерфейс, чтобы указать критерии поиска как:

printPersons(
    roster,
    new CheckPerson() {
        public boolean test(Person p) {
            return p.getGender() == Person.Sex.MALE
                && p.getAge() >= 18
                && p.getAge() <= 25;
        }
    }
);

. Здесь интерфейс очень прост, и синтаксис анонимного класса кажется громоздким и непонятным.

В Java 8 введен термин функциональный интерфейс , который является интерфейсом только с одним абстрактным методом, поэтому можно сказать, CheckPerson является функциональным интерфейсом. Мы можем использовать выражение Lambda Expression , которое позволяет нам передать функцию как аргумент метода как:

printPersons(
                roster,
                (Person p) -> p.getGender() == Person.Sex.MALE
                        && p.getAge() >= 18
                        && p.getAge() <= 25
        );

Вместо стандартного функционального интерфейса Predicate мы можем использовать интерфейс CheckPerson, что дополнительно уменьшит требуемый код.

30
задан 31 July 2009 в 16:34
поделиться

1 ответ

В XAML имеется некоторая поддержка условной компиляции . Однако это не то же самое, что в C #, код. Уловка состоит в том, чтобы использовать AlternateContent с Requires против чего-то помеченного Ignorable . Поступая так, вы можете фактически сделать части вашего xaml недоступными в зависимости от условий, а также включить или выключить их.

23
ответ дан 28 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: