Показаны сообщения с ярлыком C#. Показать все сообщения
Показаны сообщения с ярлыком C#. Показать все сообщения

воскресенье, 16 мая 2010 г.

1001-я причина, почему документацию лучше читать на английском языке (for russians)

Почитываю документацию по C#, с целью уменьшения пробелов в знаниях и некоторых тонкостях.
Фраза из MSDN:
It is not possible to modify an abstract class with the sealed (C# Reference) modifier because the two modifers have opposite meanings. The sealed modifier prevents a class from being inherited and the abstract modifier requires a class to be inherited.

Перевод из MSDN:
Абстрактный класс с модификатором sealed (Справочник по C#) изменить нельзя, поскольку sealed предотвращает наследование класса

Вопрос: что имел в виду переводчик в словах "изменить нельзя". Изменить количество свойств/полей/методов и т.д. нельзя? Можно.

Так вот, следует переводить так:
Использование модификатора sealed с классом, помеченным модификатором abstract, невозможно из-за того что данные модификаторы имеют противоположный смысл. Модификатор sealed запрещает наследование данного класса, а abstract требует, чтобы данный класс был обязательно унаследован.

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

Что касается класса, то как раз класс? объявленный как static, внутри сборки превращается в одновременно abstract и sealed. Кто не верит - ildasm в помощь.

    static class Point
    {
        static int m_x1;
        static int x1 { get { return m_x1; } }
        static int x2;
        static Point()
        {  }
    }
Выглядит следующим образом:

воскресенье, 28 февраля 2010 г.

Getting private fields values using reflection

We can get the private variables values inspite the ones are private. It is not a new idea, just for somebody who does not know

using System.Reflection;
class PrivateFieldsClass
{
    private int myPrivateField = 0;
}

class Program
{
    static void Main(string[] args)
    {
        PrivateFieldsClass myObject = new PrivateFieldsClass();
        FieldInfo fieldInfo = myObject.GetType().GetField("myPrivateField", BindingFlags.Instance BindingFlags.NonPublic);
        fieldInfo.SetValue(myObject, 42);

    }
}
But it works only if you know name of  a variable

суббота, 9 января 2010 г.

Проблема с путями к js-скриптам на Master Page

На Master Page были прописаны пути к *.js файлам. Все работало до того момента, пока не появились контент-страницы, использующие эту Master Page и лежащие во вложенных директориях. Так вот, эти контент-страницы просто не видели .*js файлы.

Одним из решений оказалось удалить пути к скриптам с Master Page, а в событии Page_Load прописать следующее:

protected void Page_Load(object sender, EventArgs e)
{
    HtmlGenericControl js = new HtmlGenericControl();
    js.TagName = "script";
    js.Attributes.Add("type", "text/javascript");
    js.Attributes.Add("language", "javascript");
    js.Attributes.Add("src", ResolveUrl("~js/myscript.js"));
    this.Page.Header.Controls.Add(js);
}

Кто какие решения еще предложит?