Odpowiedź jest kwalifikowany „nie bardzo, ale coś w rodzaju”. Możesz podać metodę statycznego rozszerzenia dla wszystkich implementatorów danego interfejsu, a następnie możesz wywołać to za pomocą swojego programisty w usłudze lub innej metodzie. Jako przykład:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace InterfacesWithGenerics
{
class Program
{
static void Main(string[] args)
{
Helper.PrintClassName<Example>(new Example());
Console.ReadLine();
}
}
public class Example : I
{
#region I Members
public string ClassName
{
get { return this.GetClassName(); }
}
#endregion
}
public interface I
{
string ClassName { get; }
}
public class Helper
{
public static void PrintClassName<T>(T input) where T : I
{
Console.WriteLine(input.GetClassName()) ;
}
}
public static class IExtensions
{
public static string GetClassName(this I yourInterface)
{
return yourInterface.GetType().ToString();
}
}
}
Tutaj mamy interfejsu (I), który określa właściwość dbamy o oraz metodę rozszerzenia statyczne (GetClassName), który jest stosowany do wszystkich członków swojego typu, który działa grunt zachorowania informacje, które chcemy. Mamy klasę (przykład), która implementuje interfejs I, więc kiedy wywołujemy naszą statyczną klasę pomocniczą przechodzącą w instancji przykładu, uruchamia ona metodę statyczną.Niestety nie jest właściwe odwoływanie się do typu T bezpośrednio w samej metodzie jako zmiennej, musisz przekazać instancję do aplikacji.
Jak wyglądałaby implementacja interfejsu? – dtb
Biorąc pod uwagę, że interfejsy definiują elementy instancji, w jaki sposób można wywołać członka interfejsu bez instancji? jeśli chcesz nazwę klasy, użyj typeof (T) i zrzuć interfejs. – meandmycode
Co próbujesz tutaj osiągnąć? Pewnie, że 'typeof (T) .FullName' wykonałby zadanie? –