Re[9]: Roles in C# 9. Нужно?
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.06.20 02:47
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Смотрим старый вброс на шейпах


S>https://www.c-sharpcorner.com/article/candidate-features-for-c-sharp-9/


S>Original Source



S>
S>public shape SGroup<T>      
S>{      
S> static T operator +(T t1, T t2);      
S> static T Zero {get;}       
S>}  
S>

S>

S>This declaration says that a type can be an SGroup<T> if it implements a+ operator over T, and a Zero static property.



S>
S>public extension IntGroup of int: SGroup<int>    
S>{    
S> public static int Zero => 0;    
S>}   
S>

S>

S>And the extension.



S>
S>public static AddAll<T>(T[] ts) where T: SGroup<T> // shape used as constraint    
S>{    
S> var result = T.Zero; // Making use of the shape's Zero property    
S> foreach (var t in ts) { result += t; } // Making use of the shape's + operator    
S> return result;    
S>}   
S>

S>Let us call the AddAll method with some ints,


S>
S>int[] numbers = { 5, 1, 9, 2, 3, 10, 8, 4, 7, 6 };     
  
S>WriteLine(AddAll(numbers)); // infers T = int   
S>


S> Я так понял, что вместо

S>
S> public shape SGroup<T>
S>


S>можно использовать интерфейс

S> а вместо
S>
S>public extension IntGroup of int: SGroup<int> 
S>


S>можно использовать


S>
S>role IntGroup  extednds int
S>


S> И в примере Мэдс все тоже самое. Ты переопределяешь только

S>
S>public static int Zero => 0; 
S>

Да, точно, операторы таки подхватываются.

S>И разница в том, что int[] нужно привести к IntGroup[]

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

S>В любом случае определить можно сделать один интерфейс для всех перегрузок операторов алгеброических типов и прописать для них роли

S>и использовать эти роли хоть откуда как Func<> Action итд.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.