IFormattable有一个很好的参考实现吗?我打算IFormatProvider为我的对象至少有一个自定义,我想确保传递给不同的可能参数集的连线正确IFormattable.ToString(string, IFormatProvider).
到目前为止我所拥有的:
public class MyDataClass : IFormattable
{
/// <seealso cref="IFormattable.ToString(string, IFormatProvider)"/>
public string ToString(string format, IFormatProvider formatProvider)
{
ICustomFormatter formatter = (ICustomFormatter)formatProvider.GetFormat(typeof(ICustomFormatter));
return formatter.Format(format, this, formatProvider);
}
}
Run Code Online (Sandbox Code Playgroud)
但似乎应该涵盖其他潜在的情况,即:
formatProvider为null,我应该回归this.ToString()吗?formatProvider.GetFormat(typeof(ICustomFormatter))返回null,是否应该抛出一个特殊的异常?欢迎任何博客文章/代码示例/ MSDN参考.
我想做以下事情
public abstract class MyAbstractClass
{
public static abstract int MagicId
{
get;
}
public static void DoSomeMagic()
{
// Need to get the MagicId value defined in the concrete implementation
}
}
public class MyConcreteClass : MyAbstractClass
{
public static override int MagicId
{
get { return 123; }
}
}
Run Code Online (Sandbox Code Playgroud)
但是我不能因为你不能拥有静态抽象成员.
我理解为什么我不能这样做 - 对设计的任何建议都能达到同样的效果?
(为了清楚起见 - 我试图提供一个带有抽象基类的库,但是具体的版本必须自己实现一些属性/方法,是的,有充分的理由让它保持静态.)
我有一个带有一些抽象方法的类,但我希望能够在设计器中编辑该类的子类.但是,设计者无法编辑子类,除非它可以创建父类的实例.所以我的计划是用存根替换抽象方法并将它们标记为虚拟 - 但是如果我创建另一个子类,如果我忘记实现它们,我将不会得到编译时错误.
有没有办法标记方法,以便它们必须由子类实现,而不将它们标记为抽象?
(我在.NET 4.0 beta,C#中工作.)
我有一个接口,从这个接口派生的所有类都应该实现自定义ToString()逻辑.这可以强制执行吗?如果是这样,怎么样?