ToString() 是 IFormattable 的
解决方案 »
- 给treeview节点增加图像
- 急 请教,C#如何创建含有窗体的dll? 我知道VC++可以做这样的dll
- 关于C# 代码安全的问题,请高手指教,谢谢
- 推荐两本asp.net安全的电子书
- 菜鸟求助????????再线等待
- 怎样将xml数据源邦定到DataGrid?
- 高分.急啊.高手求教:怎么从我的网页怎么进入我在www.163.com 的通行证.不要手工操作.直接点击.就可以连接.
- 使用 this.webBrowser1.Dispose();后,登录的session丢失,该如何解决呢
- 怎么实现fileupload浏览的时候,image控件出现图片,是在不上传的情况下~ 最好具体说明下
- 能否在mainmenu中的menuitem上面加上图片
- DataGrid中怎么让它不显示新加行?
- 奇怪的Oracle连接问题。
实际上 10 已经不是 value type 了,已经被boxing 成了reference type 也就是普通常见的object 了
而做boxing 的wrapper class 是从Object 继承下来的(就跟普通.net object 一样)
public string ToString(string format);//IConvertible
public string ToString(string format, IFormatProvider provider);//IFormattable值类型.ToString()就会有隐式装箱(boxing)的,先转成object类型,在ToString()。
System.Int32.ToString()類實現的是IFormattable接口
Finalize
MemberwiseClone
那这三个方法呢?帮助上明确的写着(从 Object 继承)
using System;
class Demo
{
public static void Main()
{}
}
struct str:object
{}编译之后的结构体部份的msil为:
.class private sequential ansi sealed beforefieldinit str
extends [mscorlib]System.ValueType
{
.pack 0
.size 1
} // end of class str也就是说其实上本身就没有结构体这个东西,内部其实上就是一个sealed class
但是问题是我在定义结构体时前面加上sealed是不允许的
所以我觉得这个问题可能是microsoft只许州官放火,不许百姓点灯,他本身的类库
自已在写的时候都可以允许结构继承,但给我们开发人员就不行了。
新鲜
而来的。
public struct Int32 : IComparable, IFormattable, IConvertible
{
public const int MaxValue = 0x7fffffff;
public const int MinValue = -2147483648;
internal int m_value;
public int CompareTo(object value);
public override bool Equals(object obj);
public override int GetHashCode();
public override string ToString();
public string ToString(string format);
public string ToString(string format, IFormatProvider provider);
public static int Parse(string s);
public static int Parse(string s, NumberStyles style);
public static int Parse(string s, IFormatProvider provider);
public static int Parse(string s, NumberStyles style, IFormatProvider provider);
public string ToString(IFormatProvider provider);
public TypeCode GetTypeCode();
bool IConvertible.ToBoolean(IFormatProvider provider);
char IConvertible.ToChar(IFormatProvider provider);
[CLSCompliant(false)]
sbyte IConvertible.ToSByte(IFormatProvider provider);
byte IConvertible.ToByte(IFormatProvider provider);
short IConvertible.ToInt16(IFormatProvider provider);
[CLSCompliant(false)]
ushort IConvertible.ToUInt16(IFormatProvider provider);
int IConvertible.ToInt32(IFormatProvider provider);
[CLSCompliant(false)]
uint IConvertible.ToUInt32(IFormatProvider provider);
long IConvertible.ToInt64(IFormatProvider provider);
[CLSCompliant(false)]
ulong IConvertible.ToUInt64(IFormatProvider provider);
float IConvertible.ToSingle(IFormatProvider provider);
double IConvertible.ToDouble(IFormatProvider provider);
decimal IConvertible.ToDecimal(IFormatProvider provider);
DateTime IConvertible.ToDateTime(IFormatProvider provider);
object IConvertible.ToType(Type type, IFormatProvider provider);
}
public TypeCode GetTypeCode()
{
return TypeCode.Int32;
}
[Serializable]
public enum TypeCode
{
// Fields
Boolean = 3,
Byte = 6,
Char = 4,
DateTime = 0x10,
DBNull = 2,
Decimal = 15,
Double = 14,
Empty = 0,
Int16 = 7,
Int32 = 9,
Int64 = 11,
Object = 1,
SByte = 5,
Single = 13,
String = 0x12,
UInt16 = 8,
UInt32 = 10,
UInt64 = 12
}
根据这个问题我发现,其实上.net中只有class ,本身是并不存在struct
详细来说只存在两种类,一种是引用类型的类,他默认是由object继承而来,
另一种就是值类型的类,它是sealed类型的,并且默认是由System.ValueType
继承而来,当然System.ValueType是由System.Object继承而来。
所以我认为在装箱和取消装箱过程当中System.Value.Type起到了最重要的作用.
你可以去帮助里查一查看有没有GetType
Finalize
MemberwiseClone