powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Атрибуты - синтаксический сахар?
27 сообщений из 27, показаны все 2 страниц
Атрибуты - синтаксический сахар?
    #38144945
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Атрибуты типов можно задать через статические свойства этих типов.

2. Атрибуты экземпляров можно задать через введение одного уровня иерархии для экземпляров - т. е. введение обёртки для каждого экземпляра в виде типа, который будет содержать в себе все атрибуты экземпляра в виде обычных полей.

3. Легкость установки значений атрибутов и приписываний этих атрибутов к сущностям с лихвой перекрывается трудностью и недуобностью получения этих значений и проблемами с байндингами. С обычными полями всё наоборот - довольно много писать кода, чтобы их установить (хотя, конструктор и в атрибутоах - тот же конструктор), зато с получением их значений и байндингами всё проще простого.

4. Изучение атрибутов - дополинтельные усилия. ООП же и статические данные в частности - как бы "из коробки".



Я уже поднимал эту тему ни один раз. Вот, например, из-за введения атрибутов в модели у меня возникла куча проблем в модели представления и представлении (MVVM) - http://www.sql.ru/forum/actualthread.aspx?tid=1002838 . Пришлось просить народ помощи и никто ничего лучше не придумал, чем костыли. Если бы изначально модель была без атрибутов и чисто на вложенных объектах (да, даже инты и даблы прийдётся упаковывать в объект, если это не просто инты и даблы, а параметры с кучей своих свойств, а не просто своим значением) и статических свойствах. Можно предположить, что у меня был неправильный дизайн модели и надо было не в атрибутах всё делать, а во вложенных объектах и статических свойствах. ОК, но тогда зачем атрибуты? Ну, мне сказали, что метаданные - это свойства свойств. - У меня так и есть - свойства свойств. Атрибуты - способ выражения метаданных в C#. - ОК, выразил. Но зачем делать такой неудобный способ доступа к атрибутам - всякие GetCustomAttributes() и прочие проверки if(attr is MyCustomAttribute), вместо простого доступа, как к полям объектов - через точку. Не спорю, может, кто-то и пишет специальные обёртки или там перегрузки (хотя в C# операторы перегружать нельзя), или извращается с fluent-кодом, за которым стоят простыни с рефлексией и лямбда-выражениями, чтобы к атрибутам тоже можно было иметь простой доступ, как к полям, но почему этого нет "из коробки"? Почему каждый изобретает велосипед (как меня уверили в моей теме) и это считается нормальным?


Может, атрибуты где-то имеют применение где-то ещё, кроме как более удобного чтения "а что же это там ещё за данные связаны вот с этим типом и этим int'ом?"? Может, я вообще не понимаю, зачем нужны атрибуты и в них есть какой-то скрытый смысл, кроме как "данные о данных"? Но для меня пока атрибуты только больше проблем создают, чем пользы: я потратил время на их изучение, я повёлся на модную штуку и ввёл её в свою модель, а когда пришла пора выводить значения в интерфейс, то я сел в лужу и вынужден либо придумывать костыли, либо переписывать модель. При этом не факт, что костыли придумаются быстрее переписывания модели.


Как дополнение - вопрос: лучше использовать атрибуты и париться с их доставанием в дальнейшем, или сразу сделать всё на вложенных объектах и статических полях?
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38144949
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да, рефлексия, где к сущности надо обращаться через написание имени этой сущности в строке, вместо привычной точки с подсказками из Интеллисенс - это выглядит как каменный век даже, а не вчерашний день. Это же пипец просто - GetProperty(string propertyName), вместо MyClass.MyProppertyProperty (первое "Property" входит в имя). Потом всякие гуру пишут, как упростить себе жизнь при рефакторинге, введя всякие проверки на существование свойства и прочие костыли.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38144950
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут следует ещё сказать, что синтаксический сахар призван как бы упрощать жизнь, подслащать её, а атрибуты при использовании в том виде, что я описал, скорее больше проблем созщают. А другого способа использования атрибутов я и не знаю - может, кто-нибудь подскажет?
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38144997
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

гугли AOP, PostSharp и т. п..
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145011
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord British,

Спасибо, посмотрю.




Я пока единственную причину применения атрибутам вижу - в C# нет такого типа, который бы был неизвестно каким (любым) до инициализации, и становился конкретным - после. Т. е. в вышеупомянутой мной обёртке для простого типа (инт, дабл и пр.), содержащей все атрибутинвые данные значения этого типа в виде обычных полей, само значение должно быть неопределённого типа до его инициализации. После инициализации оно должно стать интом, даблом, ссылочным типом - каким нужно, вобщем. Тогда бы проблем не было. А так либо обёртку для каждого простого типа надо делать, плюс вариант для ссылочного, либо вот атрибуты использовать со всеми их костылями при доступе к их значениям.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145025
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord British,

Не понял, а как мне поможет аспектно-ориентированное программирование, когда я говорю об организации данных?
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145026
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня, в принципе, всё устраивает. Меня только не устраивает муторный способ доступа к данным атрибутов.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145212
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

я не читал ваши сообщения. увидел обьем - понял что не устраивает что-то. и ответил на вопрос в названии "Атрибуты - синтаксический сахар?"
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145217
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

в C# нет метапрограммирования. Точка.

Может помочь уже упомянутое AOP. Но муторно.

Я попробовал прикинуть, можно ли с помощью кодогенерации (T4) нагенерировать автоматически свойства (чтобы обращаться через точечную нотацию к атрибутам), но вряд ли она на это способна.
Для этого нужно именно метапрограммирование, как в языках Nemerle и Boo.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145251
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikuser7320,

в C# нет метапрограммирования. Точка.

Может помочь уже упомянутое AOP. Но муторно.

Я попробовал прикинуть, можно ли с помощью кодогенерации (T4) нагенерировать автоматически свойства (чтобы обращаться через точечную нотацию к атрибутам), но вряд ли она на это способна.
Для этого нужно именно метапрограммирование, как в языках Nemerle и Boo.

Т. е. имея вот это

Код: c#
1.
2.
3.
4.
5.
6.
[MyDisplay(Name = "Class name", Description = "Class description.")]
public class MyClass
{
    [MyDisplay(Name = "Property name", Description = "Property description.")]
    public int MyProperty { get; set; }
}



Сделать вот так (нагенерировав коллекций MyClass.Attributes и MyClass.Properties со свойствами с именами, совпадающими с именами атрибутов и свойств)

Код: c#
1.
2.
3.
4.
5.
6.
// Get type attribute...
string className = MyClass.Attributes.MyDisplay.Name;

// Get member attribute...
string propertyDescription =
    MyClass.Properties.MyProperty.Attributes.MyDisplay.Description;



настолько трудно, что не стоит браться на C#?
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145324
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320настолько трудно, что не стоит браться на C#?

Когда берешься за новый язык, то следует смотреть, что уже есть готовое и не изобретать свои лисапеды без знания основ.
Локализация и валидация делаются отдельно без этих мультиков на ровном месте
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145334
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320
настолько трудно, что не стоит браться на C#?

Так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication21
{
    [MyTest1(Name = "Name1", Description = "Desc1")]
    [MyTest2(Value1=1, Value2 = new double[] { 1, 2, 3})]
    class Program
    {
        static void Main(string[] args)
        {
            var p = new Program();
            var name = p.A<MyTest1Attribute>().Name;
            var desc = p.A<MyTest1Attribute>().Description;
            var val1 = p.A<MyTest2Attribute>().Value1;
            var val2 = p.A<MyTest2Attribute>().Value2;

            var myClassObj = new MyTestClass();
            name = myClassObj.A<MyTest1Attribute>().Name;
            desc = myClassObj.A<MyTest1Attribute>().Description;
        }
    }

    public static class MyHelper
    {
        public static dynamic A<TAttr>(this object myObj)
        {
            return myObj.GetType()
                .GetCustomAttributes(typeof(TAttr), true)
                .FirstOrDefault();
        }
    }

    [MyTest1(Name="Name1", Description="Desc1")]
    public class MyTestClass
    { 
    }

    [AttributeUsage(AttributeTargets.Class)]
    public class MyTest1Attribute : Attribute
    {
        public string Name { get; set; }
        public string Description { get; set; }

        public MyTest1Attribute()
        {
        }
    }

    [AttributeUsage(AttributeTargets.Class)]
    public class MyTest2Attribute : Attribute
    {
        public int Value1 { get; set; }
        public double[] Value2 { get; set; }

        public MyTest2Attribute()
        {
        }
    }
}


...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145358
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Често признаться, проще такой записи сделать не удалось

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
            var mco = new MyTestClass();

            // для классов
            name = mco.A<MyTest1Attribute>().Name;
            desc = mco.A<MyTest1Attribute>().Description;

            // для пропертей
            val1 = mco.P(x => mco.MyProp1).A<MyTest2Attribute>().Value1;
            val2 = mco.P(x => mco.MyProp1).A<MyTest2Attribute>().Value2;



С поддержкой аттрибутов и классов и пропертей
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication21
{
    [MyTest1(Name = "Name1", Description = "Desc1")]
    [MyTest2(Value1=1, Value2 = new double[] { 1, 2, 3})]
    class Program
    {
        static void Main(string[] args)
        {
            var p = new Program();
            var name = p.A<MyTest1Attribute>().Name;
            var desc = p.A<MyTest1Attribute>().Description;
            var val1 = p.A<MyTest2Attribute>().Value1;
            var val2 = p.A<MyTest2Attribute>().Value2;

            var mco = new MyTestClass();
            name = mco.A<MyTest1Attribute>().Name;
            desc = mco.A<MyTest1Attribute>().Description;

            val1 = mco.P(x => mco.MyProp1).A<MyTest2Attribute>().Value1;
            val2 = mco.P(x => mco.MyProp1).A<MyTest2Attribute>().Value2;
        }
    }

    public static class MyHelper
    {
        public static dynamic A<TAttr>(this object myObj)
        {
            return myObj.GetType()
                .GetCustomAttributes(typeof(TAttr), true)
                .FirstOrDefault();
        }

        public static dynamic A<TAttr>(this MemberInfo memberInfo)
        {
            return memberInfo
                .GetCustomAttributes(typeof(TAttr), true)
                .FirstOrDefault();
        }

        public static MemberInfo P<T, K>(this T myObj, Expression<Func<T, K>> propSelector)
        {
            if (propSelector.Body.NodeType != ExpressionType.MemberAccess)
                throw new ArgumentException("Это не селектор члена класса");

            MemberExpression memberAccess = propSelector.Body as MemberExpression;

            if (memberAccess.Member.MemberType != MemberTypes.Property)
                throw new ArgumentException("Это не селектор проперти");

            return memberAccess.Member;
        }
    }

    [MyTest1(Name="Name1", Description="Desc1")]
    public class MyTestClass
    {
        [MyTest2(Value1 = 7, Value2 = new double[] { 7, 8, 9 })]
        public string MyProp1 { get; set; }
    }

    [AttributeUsage(AttributeTargets.Class)]
    public class MyTest1Attribute : Attribute
    {
        public string Name { get; set; }
        public string Description { get; set; }

        public MyTest1Attribute()
        {
        }
    }

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property)]
    public class MyTest2Attribute : Attribute
    {
        public int Value1 { get; set; }
        public double[] Value2 { get; set; }

        public MyTest2Attribute()
        {
        }
    }
}


...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145382
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixed теперь интеллисенс понимает, выкинул dynamic, поддерживает атрибуты методов и т. п..
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication21
{
    [MyTest1(Name = "Name1", Description = "Desc1")]
    [MyTest2(Value1=1, Value2 = new double[] { 1, 2, 3})]
    class Program
    {
        static void Main(string[] args)
        {
            var p = new Program();
            var name = p.A<MyTest1Attribute>().Name;
            var desc = p.A<MyTest1Attribute>().Description;
            var val1 = p.A<MyTest2Attribute>().Value1;
            var val2 = p.A<MyTest2Attribute>().Value2;

            var mco = new MyTestClass();
            name = mco.A<MyTest1Attribute>().Name;
            desc = mco.A<MyTest1Attribute>().Description;

            val1 = mco.M(x => mco.MyProp1).A<MyTest2Attribute>().Value1;
            val2 = mco.M(x => mco.MyProp1).A<MyTest2Attribute>().Value2;

            val1 = mco.M(x => mco.HelloWorld1()).A<MyTest2Attribute>().Value1;
            val2 = mco.M(x => mco.HelloWorld1()).A<MyTest2Attribute>().Value2;

            val1 = mco.M(x => mco.HelloWorld2(string.Empty)).A<MyTest2Attribute>().Value1;
            val2 = mco.M(x => mco.HelloWorld2(string.Empty)).A<MyTest2Attribute>().Value2;
        }
    }

    public static class MyHelper
    {
        public static TAttr A<TAttr>(this object myObj)
        {
            return (TAttr)myObj.GetType()
                .GetCustomAttributes(typeof(TAttr), true)
                .FirstOrDefault();
        }

        public static TAttr A<TAttr>(this MemberInfo memberInfo)
        {
            return (TAttr)memberInfo
                .GetCustomAttributes(typeof(TAttr), true)
                .FirstOrDefault();
        }

        public static MemberInfo M<T, K>(this T myObj, Expression<Func<T, K>> propSelector)
        {
            if ((propSelector.Body.NodeType != ExpressionType.MemberAccess) &&
                (propSelector.Body.NodeType != ExpressionType.Call))
                throw new ArgumentException("Это не селектор члена класса");

            MemberExpression memberAccess = propSelector.Body as MemberExpression;

            if (memberAccess != null)
            {
                if ((memberAccess.Member.MemberType == MemberTypes.Property) ||
                    (memberAccess.Member.MemberType == MemberTypes.Field))
                    return memberAccess.Member;
            }
            
            MethodCallExpression methodCall = propSelector.Body as MethodCallExpression;
            if (methodCall != null)
                return methodCall.Method;

            throw new ArgumentException("Можно тока филды и проперти и не void функции");
        }

        public static MemberInfo M<T>(this T myObj, Expression<Action<T>> propSelector)
        {
            if (propSelector.Body.NodeType != ExpressionType.Call)
                throw new ArgumentException("Это не селектор члена класса");

            MethodCallExpression methodCall = propSelector.Body as MethodCallExpression;
            if (methodCall != null)
                return methodCall.Method;

            throw new ArgumentException("Можно тока void функции");
        }
    }

    [MyTest1(Name="Name1", Description="Desc1")]
    public class MyTestClass
    {
        [MyTest2(Value1 = 7, Value2 = new double[] { 7, 8, 9 })]
        public string MyProp1 { get; set; }

        [MyTest2(Value1 = 3, Value2 = new double[] { 11, 18, 19 })]
        public void HelloWorld1() { }

        [MyTest2(Value1 = 31, Value2 = new double[] { 111, 181, 191 })]
        public int HelloWorld2(string msg) { return msg.Length; }
    }

    [AttributeUsage(AttributeTargets.Class)]
    public class MyTest1Attribute : Attribute
    {
        public string Name { get; set; }
        public string Description { get; set; }

        public MyTest1Attribute()
        {
        }
    }

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Method)]
    public class MyTest2Attribute : Attribute
    {
        public int Value1 { get; set; }
        public double[] Value2 { get; set; }

        public MyTest2Attribute()
        {
        }
    }
}


...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145433
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord British,
респект!!!

user7320,
респект за упорство, заставившее участников поупражнять мозги )))
но, повторюсь, imho, для Вашей задачи просто не следует использовать атрибуты
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145471
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord British, спасибо за ваш код - я и в этой, и в другой теме попозже посмотрю. Сейчас мне немного некогда - надо сдать хоть что-то, чтобы работало, поэтому я остановился пока на словаре и индексируемых свойствах, как LR подсказал. Потом, возможно, переделаю.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145472
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот откуда у меня взялись атрибуты http://www.sql.ru/forum/actualthread.aspx?tid=998647 . Мне там посоветовали их использовать. И вообще, почему вы советуете не использовать, а в ASP.NET MVC их использует с той же целью, как и я у себя? В команде MVC же тоже знают, что можно использовать просто иерархию классов - почему не делают этого?
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145561
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А вот откуда у меня взялись атрибуты http://www.sql.ru/forum/actualthread.aspx?tid=998647 . Мне там посоветовали их использовать. И вообще, почему вы советуете не использовать, а в ASP.NET MVC их использует с той же целью, как и я у себя? В команде MVC же тоже знают, что можно использовать просто иерархию классов - почему не делают этого?
Одним нужна "иерархия классов", другим нужно определять DisplayName по количеству звёзд на луне, третим - по наличию голубей в сумке почальона. Мысль понятна?
Всегда есть возможность создать кастомный атрибут и формировать его значение по своим алгоритмам. Или можно вообще отказаться от атрибутов и формировать значение в представлении на основе своих алгоритмов.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145567
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУИли можно вообще отказаться от атрибутов и формировать значение в представлении на основе своих алгоритмов.Или тупо писать "это" в XAML. Собственно, XAML для того и есть.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145576
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320petalvikuser7320,

в C# нет метапрограммирования. Точка.

Может помочь уже упомянутое AOP. Но муторно.

Я попробовал прикинуть, можно ли с помощью кодогенерации (T4) нагенерировать автоматически свойства (чтобы обращаться через точечную нотацию к атрибутам), но вряд ли она на это способна.
Для этого нужно именно метапрограммирование, как в языках Nemerle и Boo.

Т. е. имея вот это

Код: c#
1.
2.
3.
4.
5.
6.
[MyDisplay(Name = "Class name", Description = "Class description.")]
public class MyClass
{
    [MyDisplay(Name = "Property name", Description = "Property description.")]
    public int MyProperty { get; set; }
}



Сделать вот так (нагенерировав коллекций MyClass.Attributes и MyClass.Properties со свойствами с именами, совпадающими с именами атрибутов и свойств)

Код: c#
1.
2.
3.
4.
5.
6.
// Get type attribute...
string className = MyClass.Attributes.MyDisplay.Name;

// Get member attribute...
string propertyDescription =
    MyClass.Properties.MyProperty.Attributes.MyDisplay.Description;



настолько трудно, что не стоит браться на C#?

В XAF от DevExpress такая же хрень. Там вроде как ORM продвигается.
Тоже вот сижу мучаюсь. Хотя всё на основе того же C#.
С опытом всё придёт, я надеюсь.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145582
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но если сильно хочется, что мешает написать расширение разметки для XAML, вытягивающее из указанного типа/свойства/атрибута нужное значение?
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145602
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУИли можно вообще отказаться от атрибутов и формировать значение в представлении на основе своих алгоритмов.Или тупо писать "это" в XAML. Собственно, XAML для того и есть.
Практически все так и делают :)
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145623
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Или тупо писать "это" в XAML. Собственно, XAML для того и есть.
Практически все так и делают :)Неожиданно.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145638
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНеожиданно.
Спалилсо...
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145872
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Или тупо писать "это" в XAML. Собственно, XAML для того и есть.
Практически все так и делают :)
Ну и как вы будете локализованные значения вписывать руками в замл? Я же не просто так. Тем более, что раз у меня в модели есть данные - зачем мне их дублировать руками в замле? А если я в модели чего поменяю - мне в замле искать где и чего я поменял? Короче, мне ли вам рассказывать, что так делать не нужно.

Алексей КНо если сильно хочется, что мешает написать расширение разметки для XAML, вытягивающее из указанного типа/свойства/атрибута нужное значение?
Мешает то, что просто не знал про такую возможность. Вообще, много можно чего написать, а я пока попробовал только два-три способа.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145874
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы же тут все большие и сильные, и знаете много. А я маленький и ещё пока знаю мало. Вот я у вас и спрашиваю.
...
Рейтинг: 0 / 0
Атрибуты - синтаксический сахар?
    #38145932
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Ну и как вы будете локализованные значения вписывать руками в замл?
Напрямую обращаться к ресурсам, объектам с локализацией, БД и т.д. В чем проблема, что ты прицепился к этим атрибутам? :)

user7320Тем более, что раз у меня в модели есть данные - зачем мне их дублировать руками в замле?
Ты определись. Если хочешь использовать значения из атрибутов модели - используй. Кто запрещает?

user7320А если я в модели чего поменяю - мне в замле искать где и чего я поменял? Короче, мне ли вам рассказывать, что так делать не нужно.[/quot]
См. выше
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Атрибуты - синтаксический сахар?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]