using System; namespace Cryville.Crtr.Browsing.Actions { public abstract class ResourceAction : IResourceAction { public abstract string Name { get; } public abstract int Priority { get; } public abstract void Invoke(Uri uri, T resource); public void Invoke(Uri uri, object resource) { if (resource == null) throw new ArgumentNullException("resource"); if (!(resource is T)) throw new ArgumentException("Mismatched resource type."); Invoke(uri, (T)resource); } } }