相关疑难解决方法(0)

IFormattable的参考实施

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)

但似乎应该涵盖其他潜在的情况,即:

  1. 如果formatProvider为null,我应该回归this.ToString()吗?
  2. 如果formatProvider.GetFormat(typeof(ICustomFormatter))返回null,是否应该抛出一个特殊的异常?

欢迎任何博客文章/代码示例/ MSDN参考.

.net c# iformattable

13
推荐指数
1
解决办法
5020
查看次数

C#类设计 - 我可以使用什么而不是"静态抽象"?

我想做以下事情

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)

但是我不能因为你不能拥有静态抽象成员.

我理解为什么我不能这样做 - 对设计的任何建议都能达到同样的效果?

(为了清楚起见 - 我试图提供一个带有抽象基类的库,但是具体的版本必须自己实现一些属性/方法,是的,有充分的理由让它保持静态.)

c# design-patterns

9
推荐指数
2
解决办法
533
查看次数

我可以强制子类覆盖方法而不使其抽象化吗?

我有一个带有一些抽象方法的类,但我希望能够在设计器中编辑该类的子类.但是,设计者无法编辑子类,除非它可以创建父类的实例.所以我的计划是用存根替换抽象方法并将它们标记为虚拟 - 但是如果我创建另一个子类,如果我忘记实现它们,我将不会得到编译时错误.

有没有办法标记方法,以便它们必须由子类实现,而不将它们标记为抽象?

.net c# abstract-class visual-studio-2008

8
推荐指数
2
解决办法
9631
查看次数

有没有办法使派生类重写ToString()?

(我在.NET 4.0 beta,C#中工作.)

我有一个接口,从这个接口派生的所有类都应该实现自定义ToString()逻辑.这可以强制执行吗?如果是这样,怎么样?

.net c# inheritance interface tostring

8
推荐指数
1
解决办法
2216
查看次数