プログラミング/C#/型のプロパティ の変更点
更新- 追加された行はこの色です。
- 削除された行はこの色です。
- プログラミング/C#/型のプロパティ へ行く。
- プログラミング/C#/型のプロパティ の差分を削除
[[公開メモ]]
* typeof(XXX).Is???? の結果 [#b2ac63c3]
|Array|Int32|IntPtr|Void*|Decimal|Test1|Enum|Test2|String|Array|Int32[]|Test3|
|Abstract|×|×|×|×|×|○|×|×|○|×|×|
|Array|×|×|×|×|×|×|×|×|×|○|×|
|AutoLayout|×|×|○|×|×|○|○|○|○|○|○|
|Class|×|×|BGCOLOR(Red):○|×|×|×|×|BGCOLOR(Red):○|BGCOLOR(Red):○|BGCOLOR(Red):○|○|
|Enum|×|×|×|×|×|×|○|×|×|×|×|
|LayoutSequential|○|○|×|○|○|×|×|×|×|×|×|
|Nested|×|×|×|×|○|×|○|×|×|×|○|
|NestedPublic|×|×|×|×|○|×|○|×|×|×|○|
|NotPublic|×|×|○|×|×|×|×|×|×|×|×|
|Pointer|×|BGCOLOR(Red):×|○|×|×|×|×|×|×|×|×|
|Primitive|○|BGCOLOR(Red):○|×|×|×|×|×|×|×|×|×|
|Public|○|○|BGCOLOR(Red):×|○|BGCOLOR(Red):×|○|BGCOLOR(Red):×|○|○|○|BGCOLOR(Red):×|
|Sealed|○|○|BGCOLOR(Red):×|○|○|×|BGCOLOR(Red):○|○|×|○|×|
|Serializable|○|BGCOLOR(Red):○|×|○|×|○|○|○|○|○|×|
|ValueType|○|BGCOLOR(Red):○|×|○|○|BGCOLOR(Red):×|○|×|×|×|×|
|SubclassOf(typeof(ValueType))|○|BGCOLOR(Red):○|×|○|○|○|○|×|×|×|×|
ちなみに、
LANGUAGE:C#
namespace TestNameSpace
{
class Test
{
public struct Test1 { }
public enum Test2 { abc }
public class Test3 { }
}
}
とした。
* 覚え書き [#d2b22d19]
まず、
bool~
char~
数値型(sbyte, byte, short, ushort, int, uint, long, ulong, float, double)~
IntPtr
は Primitive として、同じ扱いを受ける。
IntPtr が Primitive, !IsPointer, ValueType, Serializable であるのは想像しづらい。
void* は !Primitive, IsPointer, !ValueType, !Serializable である。
さらに void* は IsClass なので、class のみを扱いたければ IsPointer を見て先に除かないといけない。
string, int[] にも IsClass がついているので、これらも特別扱いが必要。
IsPublic は普通に思い浮かべる public かどうかではない。
* IsPublic などについて [#l4849f3d]
| | |Nested |Nested Assembly |Nested FamANDAssem |Nested Family |Nested FamORAssem |Nested Private |Nested Public |NotPublic |Public|
|Public | |× |× |× |× |× |× |× |× |○|
|Public+Public_ | |○ |× |× |× |× |× |○ |× |×|
|Public+Private | |○ |× |× |× |× |○ |× |× |×|
|Public+Private+Public | |○ |× |× |× |× |× |○ |× |×|
|Public+Protected | |○ |× |× |○ |× |× |× |× |×|
|Public+Internal | |○ |○ |× |× |× |× |× |× |×|
|Public+ProtectedInternal | |○ |× |× |× |○ |× |× |× |×|
|Internal | |× |× |× |× |× |× |× |○ |×|
|Internal+Public | |○ |× |× |× |× |× |○ |× |×|
|Internal+Private | |○ |× |× |× |× |○ |× |× |×|
|Internal+Private+Public | |○ |× |× |× |× |× |○ |× |×|
|Internal+Protected | |○ |× |× |○ |× |× |× |× |×|
|Internal+Internal_ | |○ |○ |× |× |× |× |× |× |×|
|Internal+ProtectedInternal | |○ |× |× |× |○ |× |× |× |×|
各クラスの定義は以下の通り。
LANGUAGE:C#
public class Public
{
public static Type GetPrivate() { return typeof(Private); }
public static Type GetPrivatePublic() { return typeof(Private.Public); }
public static Type GetProtected() { return typeof(Protected); }
public class Public_ { }
private class Private { public class Public { } }
protected class Protected { }
internal class Internal { }
protected internal class ProtectedInternal { }
}
internal class Internal
{
public static Type GetPrivate() { return typeof(Private); }
public static Type GetProtected() { return typeof(Protected); }
public static Type GetPrivatePublic() { return typeof(Private.Public); }
public class Public { }
private class Private { public class Public { } }
protected class Protected { }
internal class Internal_ { }
protected internal class ProtectedInternal { }
}
IsNested なクラスについては、IsNestedXXX を見ることで、自身に付けられた修飾子を得ることができる。
!IsNested なクラスについては、NotPublic か Public を見ることで、internal か public かが分かる。
何も付けなければ internal になる。
* コメント [#x238ba0e]
#article_kcaptcha
**kSEhNsmYIJP [#r4d308ef]
>[Misa] (2013-01-04 (金) 02:01:42)~
~
Alright alirhgt alright that's exactly what I needed!~
//
#comment_kcaptcha
Counter: 5665 (from 2010/06/03),
today: 1,
yesterday: 1