-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathName.cs
More file actions
110 lines (97 loc) · 3.95 KB
/
Name.cs
File metadata and controls
110 lines (97 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using System;
using System.ComponentModel;
using LangExt;
namespace ReflectionExt
{
/// <summary>
/// 型名を表すクラスです。
/// </summary>
public sealed class Name : IEquatable<Name>
{
readonly Type type;
Name(Type type)
{
this.type = type;
}
/// <summary>
/// System.TypeオブジェクトからNameオブジェクトを構築します。
/// </summary>
public static Name FromType(Type type)
{
return new Name(type);
}
/// <summary>
/// 型の単純名を取得します。
/// </summary>
public string Value { get { return this.type.Name; } }
/// <summary>
/// 型の完全名を取得します。
/// 型パラメータや部分的に型パラメータが指定された型などでは、このプロパティがnullを返す可能性があります。
/// </summary>
public string FullName { get { return this.type.FullName; } }
/// <summary>
/// 型の属する名前空間を取得します。
/// </summary>
public string Namespace { get { return this.type.Namespace; } }
/// <summary>
/// 型の単純名を取得します。
/// Valueと違い、組み込み型がintなどのように特別扱いされて変換されます。
/// また、ジェネリック型も型パラメータ名を含めて変換されます。
/// </summary>
public string CSharpName { get { return this.type.ToCSharpName(); } }
/// <summary>
/// 型の完全名を取得します。
/// FullNameと違い、組み込み型がintなどのように特別扱いされて変換されます。
/// また、ジェネリック型も型パラメータ名を含めて変換されます。
/// </summary>
public string CSharpFullName { get { return this.type.ToCSharpFullName(); } }
/// <summary>
/// 現在のオブジェクトが、同じ型の別のオブジェクトと等しいかどうかを判定します。
/// </summary>
/// <param name="other">このオブジェクトと比較するName</param>
/// <returns>現在のオブジェクトがotherで指定されたオブジェクトと等しい場合はtrue、それ以外の場合はfalse</returns>
public bool Equals(Name other)
{
return this.CSharpFullName == other.CSharpFullName;
}
/// <summary>
/// このオブジェクトを文字列表現に変換します。
/// </summary>
/// <returns>このオブジェクトの文字列表現</returns>
public override string ToString()
{
return "Name(" + this.CSharpFullName + ")";
}
/// <summary>
/// 等値比較演算子です。
/// </summary>
public static bool operator ==(Name lhs, Name rhs)
{
if (lhs.IsNull()) return rhs.IsNull();
return lhs.Equals(rhs);
}
/// <summary>
/// 否定の等値比較演算子です。
/// </summary>
public static bool operator !=(Name lhs, Name rhs)
{
if (lhs.IsNull()) return rhs.IsNotNull();
return lhs.Equals(rhs) == false;
}
/// <summary>使用しません。</summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public override bool Equals(object obj)
{
var other = obj as Name;
if (other.IsNull())
return false;
return Equals(other);
}
/// <summary>使用しません。</summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public override int GetHashCode()
{
return this.CSharpFullName.GetHashCode();
}
}
}