Какие инструменты Вы используете для разработки WPF? [закрытый]

PECS (производитель extends и потребитель super)

Мнемоника → принцип Get и Put.

Этот принцип гласит, что:

  • Используйте расширенный подстановочный знак, когда вы получаете только значения из структуры.
  • Используйте суперсимвол, когда вы только Поместите значения в структуру.
  • И не используйте подстановочный знак, когда вы оба получаете и ставите.

В Java параметры и параметры типового типа не поддерживают наследование следующим образом.

class Super {
    void testCoVariance(Object parameter){} // method Consumes the Object
    Object testContraVariance(){ return null;} //method Produces the Object
}

class Sub extends Super {
    @Override
    void testCoVariance(String parameter){} //doesn't support eventhough String is subtype of Object

    @Override
    String testContraVariance(){ return null;} //compiles successfully i.e. return type is don't care 
}

Принцип подстановки Лискова: Массивы являются ковариантными (небезопасными), но Generics не являются, то есть инвариантными (безопасными). Принцип подстановки не работает с параметризованными типами, что означает, что это незаконно писать. Ковариант просто означает, что X является подтипом Y, тогда X[] также будет подтипом Y[].

Object name= new String("prem"); //works
List numbers = new ArrayList();//gets compile time error

Integer[] myInts = {1,2,3,4};
Number[] myNumber = myInts;
myNumber[0] = 3.14; //attempt of heap pollution i.e. at runtime gets java.lang.ArrayStoreException: java.lang.Double(we can fool compiler but not run-time)

List list=new ArrayList<>();
list.add("prem");
List listObject=list; //Type mismatch: cannot convert from List to List at Compiletime  

больше примеров

ограниченный (т. е. заголовок к чему-либо) подстановочный знак: Есть 3 разных варианта подстановочных знаков:

  • In-variance / Non-variance: ? или ? extends Object - неограниченный подстановочный знак. Он обозначает семью всех типов. Использовать, когда вы оба получаете и ставите.
  • Соотношение: ? extends T (семейство всех типов, которые являются подтипами T) - подстановочный знак с верхней границей. T является самым верхним классом в иерархии наследования. Используйте подстановочный знак extends, когда вы получаете только значения из структуры.
  • Contra-variance: ? super T (семейство всех типов, которые являются супертипами T) - подстановочный знак с нижней границей. T является самым низким классом в иерархии наследования. Используйте подстановочный символ super, если вы только поместите значения в структуру.

Примечание: подстановочный знак ? означает ноль или один раз, представляет неизвестный тип. Подстановочный знак может использоваться как тип параметра, никогда не используемый в качестве аргумента типа для вызова общего метода, создания экземпляра универсального класса (т. Е. При использовании подстановочного знака, эта ссылка не используется в другом месте программы, как мы используем T).

class Shape { void draw() {}}

class Circle extends Shape {void draw() {}}

class Square extends Shape {void draw() {}}

class Rectangle extends Shape {void draw() {}}

public class TestContraVariance {
 /*
   * Example for an upper bound wildcard (Get values i.e Producer `extends`)
   * 
   * */  

    public void testCoVariance(List list) {
        list.add(new Shape()); // Error:  is not applicable for the arguments (Shape) i.e. inheritance is not supporting
        list.add(new Circle()); // Error:  is not applicable for the arguments (Circle) i.e. inheritance is not supporting
        list.add(new Square()); // Error:  is not applicable for the arguments (Square) i.e. inheritance is not supporting
        list.add(new Rectangle()); // Error:  is not applicable for the arguments (Rectangle) i.e. inheritance is not supporting
        Shape shape= list.get(0);//compiles so list act as produces only

        /*You can't add a Shape,Circle,Square,Rectangle to a List 
         * You can get an object and know that it will be an Shape
         */         
    }
      /* 
* Example for  a lower bound wildcard (Put values i.e Consumer`super`)
* */
    public void testContraVariance(List list) {
        list.add(new Shape());//compiles i.e. inheritance is supporting
        list.add(new Circle());//compiles i.e. inheritance is  supporting
        list.add(new Square());//compiles i.e. inheritance is supporting
        list.add(new Rectangle());//compiles i.e. inheritance is supporting
        Shape shape= list.get(0); // Error: Type mismatch, so list acts only as consumer
        Object object= list.get(0); // gets an object, but we don't know what kind of Object it is.

        /*You can add a Shape,Circle,Square,Rectangle to a List 
        * You can't get an Shape(but can get Object) and don't know what kind of Shape it is.
        */  
    }
}

generics и примеры

63
задан Community 23 May 2017 в 12:09
поделиться

12 ответов

Microsoft обеспечивает удобный инструмент под названием "Перфоратор", который может сказать Вам, которыми части Вашего приложения WPF представляются в программном обеспечении. Это - часть большего набора "Производительности Профильные Инструменты", которые можно найти здесь .

15
ответ дан Matt Hamilton 24 November 2019 в 16:28
поделиться

Я использую следующие инструменты для разработки WPF:

  • Ищейка - Этот инструмент упрощает отладку приложений WPF во времени выполнения.
  • Родинка - Потрясающий visualizer для Visual Studio. Настоятельно рекомендованный для не только работа WPF (хотя это было создано для WPF).
  • Kaxaml - Большой небольшой инструмент к “play” с XAML. Полный intellisense. Я использую его, чтобы видеть, как XAML будет представлен.
  • Смешение Выражения - Главным образом для копирования шаблонов управления, но также и некоторой работы моделирования.
12
ответ дан Brad Leach 24 November 2019 в 16:28
поделиться

Кроме того, для Отслеживания, Родинка и VS2K8 - использование:

я нахожусь в Смешении, по крайней мере, так же как Visual Studio, когда я работаю над UI в проектах WPF. Я использую Смешение для создания начальных версий UI, и затем я настрою xaml вручную в VS. Я использую Kaxaml для "испытания вещей". Если я захочу экспериментировать, и я не хочу издержки создания нового проекта в VS или Смешении, я буду использовать Kaxaml вместо этого.

7
ответ дан Anthony Conyers 24 November 2019 в 16:28
поделиться

Экспорт Xaml . Векторы экспорта (как те сделанные в Adobe Illustrator) к xaml.

4
ответ дан Artur Carvalho 24 November 2019 в 16:28
поделиться

Бесполезные утилиты XAML другой дополнительный автор формы VS Родинки, Karl Shifflett. Генерирует формы, listviews, сетки, базирующиеся на метаданных класса. Также некоторые полезные приемы xaml: группировка элементов в панели, очистка разработчика генерировала код, и т.д.

3
ответ дан cz_dl 24 November 2019 в 16:28
поделиться

Я использую ReaderSvg для преобразования SVG (векторная графика) в XAML.

И не непосредственно связанный с WPF, но очень полезный, чтобы понять, как WPF управляет работой: Отражатель .

3
ответ дан decasteljau 24 November 2019 в 16:28
поделиться

Crack.NET - это инструмент для отладки во время выполнения и создания сценариев, созданный Джошем Смитом, который дает вам доступ к внутренним компонентам любого настольного приложения .NET, работающего на вашем компьютере. Если вам нравится Snoop and Mole для Visual Studio, вам также понравится Crack.NET. Crack.NET позволяет вам «обходить» управляемую кучу другого приложения .NET, проверять всевозможные значения объектов и даже манипулировать этими объектами с помощью скриптов IronPython.

Crack.NET

2
ответ дан 24 November 2019 в 16:28
поделиться

Я использую все инструменты, перечисленные в ответе, поэтому добавлю еще один.

Rooler - Это отличный инструмент для работы с пользовательским интерфейсом, и я считаю, что он реализован в WPF.

3
ответ дан 24 November 2019 в 16:28
поделиться

WPF PerfTool может быть полезным

2
ответ дан 24 November 2019 в 16:28
поделиться

Когда я только начинал изучение WPF, я обнаружил множество полезных утилит (перечисленных ниже). В моей статье Essential Tools for the WPF Novice на Simple-Talk.com каждый из них обсуждается с иллюстрациями и ссылками.

Общие инструменты исследования

  • Браузер SDK XAML (Microsoft) - показывает XAML и визуализированный образец для любого элемента управления.
  • XamlT , он же Type Explorer (Роб Релиа) - раскрывает детали классов WPF в новом интерфейсе.
  • Gradient Editor (Layne Thomas) - дизайнер градиентов, который создает для вас XAML.
  • Snoop WPF Debugger (Cplotts) - инспектор WPF, позволяющий исследовать визуальное содержимое работающего приложения WPF.
  • DumpControlTemplate (Charles Petzold) - отображает ControlTemplate по умолчанию для любого элемента управления WPF.
  • SDK Viewer (Microsoft) - предоставляет всю документацию SDK для WPF в многофункциональном клиентском приложении.

XamlPad и его преемники

(Моя статья содержит подробную сравнительную таблицу функций для этих шести редакторов.)

  • XamlPad (Microsoft)
  • XamlPadX (Lester Lobo)
  • XAML Cruncher (Charles Petzold)
  • Каксамл (Робби Ингербретсен)
  • Образец XamlPad (Роб Рельеа)
  • XamlHack (Чжоу Юн)
1
ответ дан 24 November 2019 в 16:28
поделиться

Новое: WPF Inspector

alt text

10
ответ дан 24 November 2019 в 16:28
поделиться

Некоторые из отличных статей со списком инструментов для WPF (из моих закладок) -

The Complete List of XAML Tools:

http://www.realsoftwaredevelopment.com/the-complete-list-of-xaml-tools/

Windows Presentation Foundation Tools and Controls:

http://blogs.msdn.com/b/mswanson/archive/2006/02/26/wpftoolsandcontrols.aspx

Еще одна, о которой я знаю -

Pistachio - "WPF Resource Visualizer" :

http://www.granthinkson.com/2007/11/08/announcing-pistachio-wpf-resource-visualizer/

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

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