如果要動態建立物件需要知道該 class 的完整名稱,就是 namespace + class name,都已經寫好了這個 class ,所以可以事先知道這些資訊,那有沒有辦法動態取得這些內容呢?
其實要取得非常的簡單:
自訂類別如下:
並且就算是拿介面去問也能正確的得到實例的名稱,筆者在測試時使用自訂 interface 和下面的 object 範例都可以正常讀取:
參考資料:
Microsoft.Learn - Object.GetType Method
其實要取得非常的簡單:
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
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com