Câu trả lời là một trình độ "không thực sự nhưng loại". Bạn có thể cung cấp một phương thức mở rộng tĩnh cho tất cả các trình triển khai của một giao diện cụ thể và sau đó có thể gọi phương thức này từ trình triển khai của bạn trong thuộc tính hoặc phương thức khác. Như một ví dụ:
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();
}
}
}
Ở đây chúng ta có một giao diện (I) trong đó xác định các bất động sản chúng tôi quan tâm và một phương pháp khuyến nông tĩnh (GetClassName) được áp dụng cho tất cả các thành viên của loại hình của nó mà hiện các công việc khó khăn nhận được thông tin chúng tôi muốn. Chúng ta có một lớp (ví dụ) thực hiện giao diện I, vì vậy khi chúng ta gọi lớp trợ giúp tĩnh của chúng ta đi qua trong một cá thể của ví dụ, nó chạy phương thức tĩnh chống lại nó.Thật không may là không hợp lệ để tham chiếu kiểu T trực tiếp trong chính phương thức đó như một biến, bạn sẽ phải chuyển một cá thể vào ứng dụng.
Cách triển khai giao diện của bạn sẽ như thế nào? – dtb
Cho rằng các giao diện xác định các thành viên cá thể, làm thế nào để bạn mong đợi để gọi một thành viên giao diện mà không có một cá thể? nếu bạn muốn tên lớp, sử dụng typeof (T) và đổ giao diện. – meandmycode
Bạn đang cố gắng đạt được điều gì ở đây? Chắc chắn 'typeof (T) .FullName' sẽ thực hiện công việc? –