※ Windows 8 Enterprise や Windows Server 2012 以外のエディションの Windows や、ドメインに参加していない Windows 8 Enterprise PC でサイドローディングを有効にするには、サイドローディング プロダクト キーのライセンス認証を行う必要がある。
Windows Phone アプリと Windows Phone クラス ライブラリで参照している .NET
「.NET for Windows Phone」となっている。
・Windows ストア アプリの場合
Windows ストア アプリとWindows ストア クラス ライブラリで参照している .NET
こちらでは、「.NET for Windows Store apps」となっているのが判る。
■ IsSubclassOf 等による検証
つまり、これらで参照している .NET は、全てが共通な訳ではない。
コア部分は共通なのだろうか?
私が試してみたところ、System 名前空間の付近でも微妙な違いがあるようだ。
今回は、以下のようなコードを用いて、この辺りを検証してみたい。
// コンソール アプリケーション
// .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 のデバッガーで値を確認してみると、次のようになった。
コンソール アプリケーションの場合の実行結果 1
コンソール アプリケーションの場合の実行結果 2
コンソール アプリケーションの場合の実行結果 3
・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のことで困ったり、いまさら聞けないことがあったら、ぜひこれらの記事を参考にしてみてください。