Который платформа должна я использовать: собственный C++ или C#? [закрытый]

Вам необходимо создать собственный рендерер на каждой платформе. Я не знаю, можете ли вы контролировать радиус по отдельности, но вы можете контролировать, соответствует ли угол радиусу или нет.

Во-первых, вам нужен собственный класс в вашем общем проекте, который будет действовать как ваш собственный элемент управления ...

using System;
using Xamarin.Forms;

namespace MyApp.Controls
{
    public class CustomFrame : Frame
    {
        // ---------------------------------------------------------------------------------------------------------------
        public static readonly BindableProperty CornerRadiusTopLeftProperty = BindableProperty.Create(
            propertyName: "CornerRadiusTopLeft",
            returnType: typeof(bool),
            declaringType: typeof(CustomFrame),
            defaultValue: true,
            defaultBindingMode: BindingMode.TwoWay
        );

        public bool CornerRadiusTopLeft
        {
            get { return (bool)GetValue(CornerRadiusTopLeftProperty); }
            set { base.SetValue(CornerRadiusTopLeftProperty, value); }
        }

        // ---------------------------------------------------------------------------------------------------------------
        public static readonly BindableProperty CornerRadiusTopRightProperty = BindableProperty.Create(
            propertyName: "CornerRadiusTopRight",
            returnType: typeof(bool),
            declaringType: typeof(CustomFrame),
            defaultValue: true,
            defaultBindingMode: BindingMode.TwoWay
        );

        public bool CornerRadiusTopRight
        {
            get { return (bool)GetValue(CornerRadiusTopRightProperty); }
            set { base.SetValue(CornerRadiusTopRightProperty, value); }
        }

        // ---------------------------------------------------------------------------------------------------------------
        public static readonly BindableProperty CornerRadiusBottomLeftProperty = BindableProperty.Create(
            propertyName: "CornerRadiusBottomLeft",
            returnType: typeof(bool),
            declaringType: typeof(CustomFrame),
            defaultValue: true,
            defaultBindingMode: BindingMode.TwoWay
        );

        public bool CornerRadiusBottomLeft
        {
            get { return (bool)GetValue(CornerRadiusBottomLeftProperty); }
            set { base.SetValue(CornerRadiusBottomLeftProperty, value); }
        }

        // ---------------------------------------------------------------------------------------------------------------
        public static readonly BindableProperty CornerRadiusBottomRightProperty = BindableProperty.Create(
            propertyName: "CornerRadiusBottomRight",
            returnType: typeof(bool),
            declaringType: typeof(CustomFrame),
            defaultValue: true,
            defaultBindingMode: BindingMode.TwoWay
        );

        public bool CornerRadiusBottomRight
        {
            get { return (bool)GetValue(CornerRadiusBottomRightProperty); }
            set { base.SetValue(CornerRadiusBottomRightProperty, value); }
        }
    }
}

Затем вам нужно создать средство визуализации на каждой платформе. Я еще не занимался Android, но это то, что вам нужно для iOS ...

using System;

using CoreAnimation;

using MyApp.iOS.CustomRenderers;
using Foundation;
using MyApp.Controls;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(CustomFrame), typeof(CustomFrameRenderer))]
namespace MyApp.iOS.CustomRenderers
{
    public class CustomFrameRenderer : FrameRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
        {
            base.OnElementChanged(e);

            if (Element != null)
            {
                var element = Element as CustomFrame;

                int result = 0;

                if (element.CornerRadiusTopLeft)
                    result += (int)CACornerMask.MinXMinYCorner;

                if (element.CornerRadiusTopRight)
                    result += (int)CACornerMask.MaxXMinYCorner;

                if (element.CornerRadiusBottomLeft)
                    result += (int)CACornerMask.MinXMaxYCorner;

                if (element.CornerRadiusBottomRight)
                    result += (int)CACornerMask.MaxXMaxYCorner;

                Layer.MaskedCorners = (CACornerMask)result;
            };
        }
    }
}

Теперь вы можете использовать его в своем файле XAML в качестве пользовательского элемента управления.

Добавьте пространство имен на свою страницу ...

xmlns:customControls="clr-namespace:MyApp.Controls"

... затем добавьте свой пользовательский кадр ...

<customControls:CustomFrame BackgroundColor="White" CornerRadius="10" HasShadow="false"            
        CornerRadiusBottomLeft="false" CornerRadiusBottomRight="false" VerticalOptions="Start" HorizontalOptions="FillAndExpand" Padding="15">

    <!-- Add your other elements here -->
</customControls:CustomFrame>

Надеюсь, это поможет вам. Удачи в рендерере Android, я уверен, что это не сложно, просто еще не добрался до него.

6
задан Aaron Fischer 7 November 2008 в 20:26
поделиться

14 ответов

"быстро" и "медленный" субъективны, особенно с сегодняшним ПК. Я не говорю, сознательно делают вещь медленной, но там не является почти столько служебным в записи управляемого приложения, сколько Вы могли бы думать. JIT и т.д. работает очень хорошо, чтобы заставить код выполниться очень быстро. И Вы можете также NGEN для дополнительной скорости запуска, если Вам действительно нужно.

На самом деле, если у Вас есть время для изучения этого, Вы могли бы хотеть рассмотреть WPF, а не winform - это - другой набор навыков, но позволяет Вам делать очень хорошее использование аппаратного обеспечения машинной графики и т.д.

Также - платформа.NET идет с новыми установками ОС и все еще очень распространена на тех, которые предшествуют ей. Таким образом для меня это был бы довольно четкий выбор разработать с C#/.NET. Время для разработки устойчивого и полностью протестированного приложения C++ (без утечек, и т.д.) (для меня, по крайней мере) намного больше, чем то же с C#.

19
ответ дан 8 December 2019 в 02:22
поделиться

С какой технологией Вы более знакомы?

Информация, которую Вы дали, не включает ничего, что помогло бы решить. Да, приложения MFC имеют тенденцию быть меньшими (при включении размера во время выполнения, который не является подходящей мерой в конечном счете), более быстро реагирующий и гумус, дорогостоящий для разработки.И что?

0
ответ дан 8 December 2019 в 02:22
поделиться

Блок цитирования

.NET легче работать с. Если Вы не потеряете пользователей при помощи его или испытаете затруднения из-за миграции кода, необходимо, вероятно, использовать.NET. Очень маловероятно, что скорость будет проблемой для этого. Размер, вероятно, не имеет значения так очень, также.

0
ответ дан 8 December 2019 в 02:22
поделиться

Также, Если я буду использовать C# затем, то приложение будет медленнее, чем собственный код и Он reqiures платформа.NET для выполнения

Приложение MFC требует, чтобы dll's MFC работал (и вероятно время выполнения VC также!), таким образом, они, возможно, должны были бы быть установлены, или если они статически связаны, Вы добавляете к размеру exe.

0
ответ дан 8 December 2019 в 02:22
поделиться

Выбор языка или инструмента должны продиктовать функциональные требования и требования к производительности Вашего проекта и экспертных знаний. Если производительность является реальным соображением для Вас, и Вы сделали некоторый анализ для предпочтения C++ по C#, то у Вас уже есть решение. Отметьте, хотя это имеющее основанное на MFC приложение не ужасно эффективно также. С другой стороны, издержки в приложениях.NET завышены.

Производительность - что-то, что является действительно функцией того, как хорошо Вы пишете свой код и какие требования масштабируемости существуют. Если бы необходимо было бы только работать с одним клиентом с максимальной базой данных записи 1K, то мы не должны говорить производительность.

Если бы простота разработки и пригодности для обслуживания более важна, конечно, C# был бы выбором.

Таким образом, я не уверен, что это - вопрос, которому можно дать ответ как выбор A или B с данными, Вы обеспечили. Необходимо сделать анализ функциональных и нефункциональных требований и решить.

0
ответ дан 8 December 2019 в 02:22
поделиться

Приложения C# медленнее для запуска, чем приложения MFC, но Вы не могли бы заметить различие в скорости между двумя, после того как приложение загружается.

1
ответ дан 8 December 2019 в 02:22
поделиться

Спором скорости между собственным и управляемым кодом является в основном надуманный вопрос в этой точке. Каждый выпуск Платформы.NET делает повышения производительности по предыдущим, и производительность приложения всегда является очень высоким приоритетом для групп разработчиков.NET.

Начиная с Windows Vista и Windows Server 2008, Платформа.NET установлена как часть операционной системы. Это - также часть Windows Update, таким образом, почти любой системе Windows XP также установят его. Если требование, чтобы платформа была установлена на целевой машине, является действительно так большой частью проблемы существуют также компиляторы, которые по существу встроят необходимые части во время выполнения в Ваше приложение для генерации единственного exe, но они являются дорогими (и по-моему, не действительно стоят стоимости).

1
ответ дан 8 December 2019 в 02:22
поделиться

MFC не трудно изучить, на самом деле это очень легко.

Почти равняйтесь C#.

1
ответ дан 8 December 2019 в 02:22
поделиться

По-моему, требования должны помочь Вам решить платформу. Что более важно: Наличие приложения, которое легко удобно в сопровождении или тот, который должен быть чрезвычайно быстрым и маленьким?

Большой класс приложений в наше время может быть записан с помощью.NET и управляемого кода, и это в целом выгодно для разработки в долгосрочной перспективе. На основе моего опыта приложения.NET обычно достаточно быстры для большинства вариантов использования, и они более просты создать. Собственный C++ все еще имеет свое использование, но только для того, чтобы быть "быстрее и меньшим", когда "достаточно быстро и достаточно маленький" достаточно, не звучит достаточно как выравнивание.

1
ответ дан 8 December 2019 в 02:22
поделиться

Обратите внимание также, что большей части компьютера Windows уже установили.NET на них, так, чтобы действительно не должно было быть беспокойство.

Кроме того, кроме установки.NET, приложения.NET имеют тенденцию быть довольно маленькими.

И для большей части приложения с UI, скорость Пользователя является действительно ограничивающим фактором времени.

2
ответ дан 8 December 2019 в 02:22
поделиться

Бойтесь оптимизировать слишком рано; Вы упоминаете скорость кода, но для большинства операций интерфейса пользователя Windows, различие не является заметным, поскольку основные узкие места рисования и доступа к диску не отличаются для любого подхода.

Моя рекомендация состоит в том, что Вы используете C# и WPF или WinForms для Вашего пользовательского интерфейса. При обнаружении с некоторыми медленными холмами используйте профилировщика для определения где и затем рассмотрите замену некоторой бизнес-логики с собственным кодом, но только если существует преимущество.

6
ответ дан 8 December 2019 в 02:22
поделиться

Существует очень много возможных Приложений Windows, и у каждого есть его собственные требования.

Если Ваше приложение должно быть быстрым (и что я продолжаю работать, делает), то собственный C++ является хорошим способом пойти.

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

Если Ваше приложение, вероятно, будет загружено много, Вы, вероятно, хотите быть подозрительными более поздними версиями.NET, которую Ваши пользователи еще не могли бы иметь.

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

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

4
ответ дан 8 December 2019 в 02:22
поделиться

Сначала.. (хотя я - умирание твердого кодера C++), я должен признать, что c# в большинстве случаев прекрасно подходит, где скорость и размер затронуты. В некоторых случаях приложение мало, потому что интерпретируемая часть уже находится в целевой системе. (не делайте spamm меня на том, приложение с dll мало затем приложение все в одном. Windows просто, оказывается уже, поставлется с "DLL" туда.)

Относительно кодирования.. Я честно не думаю, что существует значительная разница. Я не трачу много своего кода вводящего времени. Большая часть из него продумывает проблему. Часть кода является довольно небольшой. Сохранение нескольких строк тут и там.. Blahh это не аргумент в пользу меня.. Если бы это было, то я работал бы в APL. Изучая STL, MFC и что имеет Вас, вероятен столь же интенсивный как изучение c# библиотек. В конце они являются всеми одинаковыми.

C# действительно имеет одну вещь, идущую для него.. Рынок. Это - последний "горячий" навык и таким образом, существует рынок для него. Задания легко найти. Теперь имейте в виду, что Java был "горячим" навыком несколько лет назад и теперь когда-либо tom dick, и измотайте, имеет его на их резюме. Это мешает к нише самостоятельно.

Хорошо.. все, что сказало.. Я ЛЮБЛЮ C++.. Нет ничего как то, чтобы пачкаться, когда я действительно должен. Когда MFC освобождает, не делают задания, я смотрю на то, на чем они находятся и так далее и так далее.. Это - постоянный язык, и я живо это все еще в или около наиболее используемого Ленга в мире. C++ Yah, Yah!.

3
ответ дан 8 December 2019 в 02:22
поделиться

Наличие никакой информации о приложении, которое Вы планируете разработать, я голосую за WPF.

1
ответ дан 8 December 2019 в 02:22
поделиться
Другие вопросы по тегам:

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