- 关 键 词:
- .net framework
精华网络内容 :http://www.qqread.com/network/
Customizing the Format Method for Custom Types
You can easily implement a Format method for your own custom types by overriding the IFormattable Interface. All .NET Framework numeric base types implement IFormattable and have overridden the Format method of that class. In the overridden Format method you can either handle the built-in codes yourself, catch custom codes, or pass codes on to the IFormattable object.
The IFormattable interface combined with the IServiceProvider interface provides the following functionality:
Conversion of numbers, dates and times to strings using a built-in set of specifiers called formatting codes.
Extensibility through overriding of the IServiceProvider object allowing you to extend the format codes offered for base types.
Enhancement of custom types by allowing existing and custom codes to be applied through the Format method.
The following example illustrates the creation of a custom type called MyType. This example adds a custom format specifier of B that will return a binary representation of the type's value.
public class MyType : IFormattable
{
// a value for our class
private int MyValue;
// constructor
public MyType( int value )
{
MyValuealue = value;
}
//Custom Format method for the type
public string Format(string format, IServiceObjectProvider sop)
{
if (format.Equals ("b"))
{
return Convert.ToString (MyValue, 2);
}
else {
return MyValue.Format (format, sop);
}
}
}
Customizing the Format method for existing types
By overriding IServiceObjectProvider and ICustomFormatter you can provide additional codes for formatting base types in an already defined class. First, you define a class that implements the two previous mentioned interfaces and overrides GetServiceObject and Format. The following code defines a class that adds a custom Format method that can produce different base-values of an integer:
public class MyFormat : IServiceObjectProvider, ICustomFormatter
{
//String.Format calls this method to get an instance of a
//ICustomFormatter to handle the formatting.
public object GetServiceObject (Type service)
{
if (service == typeof (ICustomFormatter))
{
return this;
}
else{
return null;
}
}
//Once String.Format gets the ICustomFormatter it calls this format
//method on each argument.
public string Format (string format, object arg, IServiceObjectProvider sop)
{
if (format == null)
{
return String.Format ("{0}", arg);
}
int i = format.Length;
//if it's not one of our codes
if (!format.StartsWith("B"))
{
String temp = "{0:" + format +"}";
//fall through to the system support
return String.Format (temp, arg);
}
//otherwise, get the base out of the format string and use it to
//form the output string
format = format.Trim (new char [] {'B'});
int b = Convert.ToInt32 (format);
return Convert.ToString ((int)arg, b);
}
}
The following code uses the custom Format method defined in MyFormat to display the base-16 representation of MyInt from String.Format:
int MyInt = 42;
String.Format ("{0} in the custom B16 format is {1:B16}", new object [] { MyInt, MyInt }, new MyFormat ());
//returns "42 in custom B16 format is 2a"进入讨论组讨论。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- VB.NET 入门教程 (22167次浏览)
- asp.net 实现购物车详细代码 (14312次浏览)
- C#版的网站新闻发布系统 (690次浏览)
- ASP.NET2.0轻松搞定统计图表 (651次浏览)
- 使用ASP.NET AJAX实现幻灯片效果 (604次浏览)
- ASP.NET如何存取 SQLServer数据库图片 (592次浏览)
- 如何制作Asp.Net界面模板 (582次浏览)
- ASP.NET中实现DataGrid数据排序 (580次浏览)
- VB.NET读写文本文件方法 (579次浏览)
- VC#初学入门:第一个Windows程序 (536次浏览)



