C# 動態取得類別的完整名稱(Name, Namespace, FullName)

如果要動態建立物件需要知道該 class 的完整名稱,就是 namespace + class name,都已經寫好了這個 class ,所以可以事先知道這些資訊,那有沒有辦法動態取得這些內容呢?

其實要取得非常的簡單:
    
UserDto userDto = new UserDto(); // 自訂類別
Console.WriteLine($"class name is '{userDto.GetType().Name}'");
Console.WriteLine($"namespace is '{userDto.GetType().Namespace}'");
Console.WriteLine($"full class name is '{userDto.GetType().FullName}'");

/*
class name is 'UserDto'
namespace is 'WinFormsApp1.Dto'
full class name is 'WinFormsApp1.Dto.UserDto'
 */
    

自訂類別如下:
    
namespace WinFormsApp1.Dto;

public class UserDto
{
    public string Name { get; set; } = string.Empty;
}
    

並且就算是拿介面去問也能正確的得到實例的名稱,筆者在測試時使用自訂 interface 和下面的 object 範例都可以正常讀取:
    
object userInterface = new UserDto();
Console.WriteLine($"class name is '{userInterface.GetType().Name}'");
Console.WriteLine($"namespace is '{userInterface.GetType().Namespace}'");
Console.WriteLine($"full class name is '{userInterface.GetType().FullName}'");

/*
class name is 'UserDto'
namespace is 'WinFormsApp1.Dto'
full class name is 'WinFormsApp1.Dto.UserDto'
*/

userInterface = new UserEntity();
Console.WriteLine($"class name is '{userInterface.GetType().Name}'");
Console.WriteLine($"namespace is '{userInterface.GetType().Namespace}'");
Console.WriteLine($"full class name is '{userInterface.GetType().FullName}'");
/*
class name is 'UserEntity'
namespace is 'WinFormsApp1.Entity'
full class name is 'WinFormsApp1.Entity.UserEntity'
*/
    



參考資料:
Microsoft.Learn - Object.GetType Method

留言