※ Windows 8 Enterprise や Windows Server 2012 以外のエディションの Windows や、ドメインに参加していない Windows 8 Enterprise PC でサイドローディングを有効にするには、サイドローディング プロダクト キーのライセンス認証を行う必要がある。
// コンソール アプリケーション
// .NET Framework 4.5
using System.Reflection; // ※ GetRuntimeProperties に必要
class Program
{
class Super { }
class Sub : Super
{
public int Number { get; set; }
public string Name { get; set; }
}
static void Test()
{
var sub = new Sub();
bool result1 = sub.GetType().IsSubclassOf(typeof(Super));
bool result2 = sub.GetType().IsAssignableFrom(typeof(Super));
bool result3 = sub is Super;
var properties1 = typeof(Sub).GetProperties();
var properties2 = typeof(Sub).GetRuntimeProperties();
}
static void Main()
{
Test();
}
}
これはコンソール アプリケーションのソースコードだが、正常にコンパイルでき、正常に動作する。
Visual Studio のデバッガーで値を確認してみると、次のようになった。
・WPF と Silverlight の場合
同様のことを、WPF と Silverlight の場合で試してみると次のようになる。
先ず WPF から。
// WPF アプリケーション
// .NET Framework 4.5
using System.Windows;
namespace WpfApplication
{
using System.Reflection; // ※ GetRuntimeProperties に必要
public partial class App : Application
{
class Super { }
class Sub : Super
{
public int Number { get; set; }
public string Name { get; set; }
}
static void Test()
{
var sub = new Sub();
bool result1 = sub.GetType().IsSubclassOf(typeof(Super)); // ○ OK
bool result2 = sub.GetType().IsAssignableFrom(typeof(Super)); // ○ OK
bool result3 = sub is Super; // ○ OK
var properties1 = typeof(Sub).GetProperties(); // ○ OK
var properties2 = typeof(Sub).GetRuntimeProperties(); // ○ OK
}
public App()
{
Test();
}
}
}
// Silverlight 5
using System;
using System.Windows;
namespace SilverlightApplication
{
using System.Reflection; // ※ GetRuntimeProperties に必要
public partial class App : Application
{
class Super { }
class Sub : Super
{
public int Number { get; set; }
public string Name { get; set; }
}
static void Test()
{
var sub = new Sub();
bool result1 = sub.GetType().IsSubclassOf(typeof(Super)); // ○ OK
bool result2 = sub.GetType().IsAssignableFrom(typeof(Super)); // ○ OK
bool result3 = sub is Super; // ○ OK
var properties1 = typeof(Sub).GetProperties(); // ○ OK
var properties2 = typeof(Sub).GetRuntimeProperties(); // × コンパイル エラー
}
public App()
{
Test();
// ... 以下省略 ...
}
// ... 以下省略 ...
}
}
// Windows Phone OS 8.0
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using PhoneApp.Resources;
using System.Diagnostics;
using System.Windows;
using System.Windows.Markup;
using System.Windows.Navigation;
namespace PhoneApp
{
using System;
using System.Reflection; // ※ GetRuntimeProperties に必要
public partial class App : Application
{
class Super { }
class Sub : Super
{
public int Number { get; set; }
public string Name { get; set; }
}
static void Test()
{
var sub = new Sub();
bool result1 = sub.GetType().IsSubclassOf(typeof(Super)); // ○ OK
bool result2 = sub.GetType().IsAssignableFrom(typeof(Super)); // ○ OK
bool result3 = sub is Super; // ○ OK
var properties1 = typeof(Sub).GetProperties(); // ○ OK
var properties2 = typeof(Sub).GetRuntimeProperties(); // ○ OK
}
public App()
{
Test();
// ... 以下省略 ...
}
// ... 以下省略 ...
}
}
全て問題なくコンパイル・実行できる。
・Windows ストア アプリの場合
さて、Windows ストア アプリではどうなるだろうか。
こうなるのだ。
// Windows ストア アプリ
using System;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace WindowsStoreApp
{
using System.Reflection; // ※ GetRuntimeProperties に必要
sealed partial class App : Application
{
class Super { }
class Sub : Super
{
public int Number { get; set; }
public string Name { get; set; }
}
static void Test()
{
var sub = new Sub();
bool result1 = sub.GetType().IsSubclassOf(typeof(Super)); // × コンパイル エラー
bool result2 = sub.GetType().IsAssignableFrom(typeof(Super)); // × コンパイル エラー
bool result3 = sub is Super; // ○ OK
var properties1 = typeof(Sub).GetProperties(); // × コンパイル エラー
var properties2 = typeof(Sub).GetRuntimeProperties(); // ○ OK
}
public App()
{
Test();
// ... 以下省略 ...
this.InitializeComponent();
this.Suspending += OnSuspending;
}
// ... 以下省略 ...
}
}
なんと、System 名前空間の Type 型が IsSubclassOf や IsAssignableFrom を持っていないようだ。
実際に調べてみると、Windows ストア アプリが参照している System 名前空間の Type 型は以下の public メンバーを持っている。
// Windows ストア アプリが参照している System 名前空間の Type 型
// アセンブリ System.Runtime.dll, v4.0.0.0
// Framework\.NETCore\v4.5\System.Runtime.dll
namespace System
{
public abstract class Type
{
public static readonly object Missing;
public abstract string AssemblyQualifiedName { get; }
public abstract Type DeclaringType { get; }
public abstract string FullName { get; }
public abstract int GenericParameterPosition { get; }
public abstract Type[] GenericTypeArguments { get; }
public bool HasElementType { get; }
public bool IsArray { get; }
public bool IsByRef { get; }
public abstract bool IsConstructedGenericType { get; }
public abstract bool IsGenericParameter { get; }
public bool IsNested { get; }
public bool IsPointer { get; }
public abstract string Name { get; }
public abstract string Namespace { get; }
public virtual RuntimeTypeHandle TypeHandle { get; }
public override bool Equals(object o);
public bool Equals(Type o);
public abstract int GetArrayRank();
public abstract Type GetElementType();
public abstract Type GetGenericTypeDefinition();
public override int GetHashCode();
public static Type GetType(string typeName);
public static Type GetType(string typeName, bool throwOnError);
public static Type GetTypeFromHandle(RuntimeTypeHandle handle);
public abstract Type MakeArrayType();
public abstract Type MakeArrayType(int rank);
public abstract Type MakeByRefType();
public abstract Type MakeGenericType(params Type[] typeArguments);
public abstract Type MakePointerType();
public override string ToString();
}
}
新しい Windows 8 を使ってみたい、でもデザインも大幅に変わったし、大丈夫かな?
そんなときに便利な、Windows 8 にまつわるお役立ち記事をまとめて、リンク集にしてみました。 執筆を担当するのは、マイクロソフトに最優秀技術者として表彰された「Microsoft MVP」* のメンバー! Windows 8へのアップグレード方法から便利なショートカットの紹介まで、幅広いトピックが満載です。 Windows 8のことで困ったり、いまさら聞けないことがあったら、ぜひこれらの記事を参考にしてみてください。
新しい Windows 8 を使ってみたい、でもデザインも大幅に変わったし、大丈夫かな?
そんなときに便利な、Windows 8 にまつわるお役立ち記事をまとめて、リンク集にしてみました。
執筆を担当するのは、マイクロソフトに最優秀技術者として表彰された「Microsoft MVP」* のメンバー!
Windows 8へのアップグレード方法から便利なショートカットの紹介まで、幅広いトピックが満載です。
Windows 8のことで困ったり、いまさら聞けないことがあったら、ぜひこれらの記事を参考にしてみてください。