Укажите на тот, который не является ответом.
, Даже если Вы никогда не программируете в нем, я нахожу полезным знать по крайней мере одну ассемблерную систему команд. Это - часть программистов бесконечные поиски, чтобы знать больше и поэтому быть лучше. Также полезный при продвижении в платформы у Вас нет исходного кода к и имеющий, по крайней мере, общее представление, что продолжается. Это также помогает Вам понять JavaByteCode и.Net IL, поскольку они оба подобны ассемблеру.
Для ответа на вопрос, когда у Вас есть небольшой объем кода или большое количество времени. Самый полезный для использования во встроенных микросхемах, где низкая сложность микросхемы и плохая конкуренция в компиляторах, предназначающихся для этих микросхем, могут склонить чашу весов в пользу людей. Также для ограниченных устройств Вы часто обмениваете размер кода / размер/производительность памяти способом, который был бы труден дать компилятору команду делать. например, Я знаю, что это пользовательское действие часто не называют, таким образом, у меня будут небольшой размер кода и низкая производительность, но эта другая функция, которые выглядят подобными, используется каждая секунда, таким образом, у меня будут больший размер кода и более быстрая производительность. Это - вид компромисса, который может использовать квалифицированный программист блока.
я также хотел бы добавить, что существует много второго плана, где можно кодировать в C, компилируют и исследуют произведенный блок, затем или изменяют Вас код C или настраивают и поддерживают как блок.
Мой друг работает над микро контроллерами, в настоящее время микросхемы для управления маленькими электродвигателями. Он работает в комбинации низкого уровня c и блока. Он когда-то сказал мне о хорошем дне на работе, где он уменьшил основной цикл с 48 инструкций до 43. Он также сталкивается с выбором как код, вырос для заполнения 256k микросхемы, и бизнес желает новую возможность, сделайте Вас
я хотел бы добавить как коммерческий разработчик с настоящим портфелем или языками, платформами, типами приложений, я никогда не чувствовал потребность погрузиться в запись блока. Я имею, как когда-либо всегда ценившийся знание я получил об этом. И иногда отлаживаемый в него.
я знаю, что намного больше ответил на вопрос, "почему я должен изучить ассемблер", но я чувствую, что это - более важный вопрос затем, когда это быстрее.
так позволяет попытке еще раз, необходимо думать о блоке
Не забывает сравнивать Ваш блок с компилятором, сгенерированным для наблюдения, который быстрее/меньше/лучше.
David.
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace PlaceHolderTextBoxCSharp
{
public class CTextBox : TextBox
{
private Panel contenedor;
protected string texto = "PlaceHolderText";
protected Color colorTextoDefault = Color.Gray;
public Color colorTexto = Color.Gray;
protected Color colorTextoObligatorio = Color.Red;
private Font fuente;
private SolidBrush establecerColorTexto;
private bool obligatoriedad = false;
private bool colorConFoco = false;
private int vuelta = 0;
public CTextBox()
{
Inicializar();
}
private void Inicializar()
{
fuente = Font;
CharacterCasing = CharacterCasing.Upper;
contenedor = null;
MuestraPlaceHolder();
Leave += new EventHandler(PierdeFoco);
TextChanged += new EventHandler(CambiaTexto);
}
private void EliminaPlaceHolder()
{
if (contenedor != null)
{
Controls.Remove(contenedor);
contenedor = null;
}
}
private void MuestraPlaceHolder()
{
if (contenedor == null && TextLength <= 0)
{
contenedor = new Panel();
contenedor.Paint += new PaintEventHandler(contenedorPaint);
contenedor.Invalidate();
contenedor.Click += new EventHandler(contenedorClick);
Controls.Add(contenedor);
}
}
private void contenedorClick(object sender, EventArgs e)
{
Focus();
}
private void contenedorPaint(object sender, PaintEventArgs e)
{
contenedor.Location = new Point(2, 0);
contenedor.Height = Height;
contenedor.Width = Width;
contenedor.Anchor = AnchorStyles.Left | AnchorStyles.Right;
establecerColorTexto = new SolidBrush(colorTexto);
Graphics g = e.Graphics;
g.DrawString(texto, fuente, establecerColorTexto, new PointF(-1f, 1f));
}
private void PierdeFoco(object sender, EventArgs e)
{
if (TextLength > 0)
{
EliminaPlaceHolder();
}
else
{
if (obligatoriedad == true)
{
colorTexto = colorTextoObligatorio;
}
else
{
colorTexto = colorTextoDefault;
}
Invalidate();
}
}
private void CambiaTexto(object sender, EventArgs e)
{
if (TextLength > 0)
{
EliminaPlaceHolder();
}
else
{
MuestraPlaceHolder();
vuelta += 1;
if (vuelta >= 1 && obligatoriedad == true)
{
colorTexto = colorTextoObligatorio;
}
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
MuestraPlaceHolder();
}
protected override void OnInvalidated(InvalidateEventArgs e)
{
base.OnInvalidated(e);
if (contenedor != null)
{
contenedor.Invalidate();
}
}
[Category("Atributos PlaceHolder")]
[Description("Establece el texto a mostrar.")]
public string PlaceHolderText
{
get
{
return texto;
}
set
{
texto = value;
Invalidate();
}
}
[Category("Atributos PlaceHolder")]
[Description("Establece el estilo de fuente del PlaceHolder.")]
public Font PlaceHolderFont
{
get
{
return fuente;
}
set
{
fuente = value;
Invalidate();
}
}
[Category("Atributos PlaceHolder")]
[Description("Indica si el campo es obligatorio.")]
public bool PlaceHolderFieldRequired
{
get
{
return obligatoriedad;
}
set
{
obligatoriedad = value;
Invalidate();
}
}
}
}