Ответ квалифицированный "не совсем, но вроде". Вы можете предоставить метод статического расширения всем разработчикам данного интерфейса, а затем вызвать его из своего разработчика в свойстве или другом методе. Как пример:
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();
}
}
}
Здесь у нас есть интерфейс (I), который определяет свойство, о котором мы заботимся, и метод статического расширения (GetClassName), который применяется ко всем членам его типа, который выполняет основную работу по получению необходимой нам информации. У нас есть класс (Example), который реализует интерфейс I, поэтому, когда мы вызываем наш статический вспомогательный класс, передавая экземпляр класса Example, он запускает статический метод для него. К сожалению, недопустимо ссылаться на тип T непосредственно внутри самого метода как на переменную, вам придется передать экземпляр в приложение.