Wpis z mikrobloga

@FedoraTyrone: Execution of any type's initializer method will not trigger automatic execution of any initializer methods defined by its base type, nor of any interfaces that the type implements
  • Odpowiedz
  • 0
@FedoraTyrone Myślałem, że jak się kliknie w "static constructor" to pokaże jakiś przykład użycia, albo w ogóle coś o tym, ale przenosi do konstruktorów klas.

Nie wiem co Ci podpowiedzieć, według mnie to bez sensu, bo jak pisałem wyżej, instancji interfejsów się nie tworzy. Może to jakieś przeoczenie twórców języka, albo błąd programu, jeśli Ci edytor błędu nie pokazuje, a program się kompiluje. Na stronie MS poza Twoim obrazkiem nic dotyczącego konstruktorów
  • Odpowiedz
  • 0
@zibizz1: właśnie nie widzę sposobu na ręczne wywołanie statycznego konstruktora interfejsu. Przychodzi mi do głowy jedynie jakaś zabawa refleksją, ale to już cudowanie.

@Goglez nie potrzebuję tego w normalnym projekcie. Dla samego siebie od czasu do czasu grzebię i staram się poznawać różne smaczki języka i możliwość tworzenia statycznych konstruktorów w interfejsach wydała się warta przetestowania.
  • Odpowiedz
@Goglez: @FedoraTyrone Interfejs opisuje kontrakt, jaki ma spełniać dany obiekt w danym kontekście. Oznacza to, że można użyć obiektów kompletnie różnych, niezwiązanych ze sobą, o zupełnie odmiennej logice biznesowej, pod warunkiem, że spełniają dany interfejs. Jak się zapewne domyślacie, pisanie wspólnego, domyślnego konstruktora dla takich obiektów może być uzasadnione tylko wtedy, gdy w danym kontekście zachodzi potrzeba zainicjowania w odpowiedni sposób pól, które są częścią interfejsu. W innym razie będzie to
  • Odpowiedz
"A po co to komu?" Bo trafi się autysta na rozmowie i o to zapyta. Wiedzieć trzeba a zastosowań w życiu codziennym nie za dużo i przy ściśle opisanych sytuacjach w dokumentacji xd Bardzo często takie ficzery w c# są na potrzeby wewnętrzne Microsoftu
  • Odpowiedz
@szmichal: bo od takich rzeczy swędzi mózg, to jest jak taki przycisk na jakimś urządzeniu co nie jest opisany i zastanawiasz po co to komu. Moim zdaniem powód jest taki że obezność tego tworu wynika wynika z tego że komuś nie chciało się pisać ifa żeby to zablokowac, jest bardziej generycznie

@MostlyRenegade No własnie statyczne konstruktowy nie są wywoływane automatycznie bo to by było bardzo skomplikowane, przez to ze można implementowac
  • Odpowiedz
statyczne konstruktowy nie są wywoływane automatycznie bo to by było bardzo skomplikowane, przez to ze można implementowac wiele interfejsów


@zibizz1: otóż to. Ale dodajmy - chodzi o konstruktory interfejsu. Można mieć konstruktor w klasie statycznej i wtedy jest jak najbardziej wywoływany.

I też nie wiem, po co to jest. Nigdy z tego nie korzystałem.
Jeśli kogoś interesuje ten temat bliżej, to znalazłem jakiegoś bloga, na którym facet pisze o tych interfejsach
  • Odpowiedz
@FedoraTyrone: Musiałbyś chyba wywołać taki "konstruktor" jak statyczną metodę.
https://dotnetfiddle.net/TbcyCX

public interface ICustomer
{
static void Customer() => Console.WriteLine("Hello from interface");
}

public class Customer: ICustomer
{
public string Name { get; }

public Customer(string name)
{
Name = name;
}

static Customer()
{
ICustomer.Customer();
}
}
  • Odpowiedz
@FedoraTyrone: Statyczny konstruktor w interfejsie można wywołać używając statycznych pól lub metod zdefiniowanych na tym interfejsie.

public interface ITest
{
static ITest()
{
Console.WriteLine("static constructor");
}

static int Value;

static void Run(){}
}

Zarówno ITest.Run(); jak i ITest.Value wywoła konstruktor.
  • Odpowiedz