概念:它是所有类型的基类,基于里氏替换原则,可以用object容器装任何物体。
例子:
static void Main(string[] args)
{
//引用类型,用as
object son = new Son();
if(son is Son)
{
(son as Son).Speak();
}
object str = "123456";
string s = str as string;
//string s=str.ToString();
object nums = new int[10];
int[] arr = nums as int[];
//值类型,用强转
object num = 123;
int res = (int)num;
Console.ReadKey();
}
装箱和拆箱
装箱:将值类型转为引用类型,将栈内存搬到堆内存里。
拆箱:将引用类型转为值类型,将堆内存搬到值内存里。
这里的引用类型用object。
好处:不确定类型可以方便参数的存储和传递。
坏处:内存迁移,性能消耗,所以要少用。
例子:
class Person
{
static void Main(string[] args)
{
//可以传不同类型
print(1, 23, 5.0f, 6.12, "hello", new Son());
Console.ReadKey();
}
static void print(params object[] array)
{
}
}
密封类
通过sealed关键字修饰类,让类无法被继承,断子绝孙。
密封方法(与override配合使用)
例子:
abstract class Animal
{
public string name;
public abstract void Eat();
public virtual void Speak()
{
Console.WriteLine("叫");
}
}
class Person : Animal
{
//在override前加一个sealed,子类就无法重写
public sealed override void Eat()
{
}
public override void Speak()
{
//base.Speak();
}
}
class WhitePerson:Person
{
//public override void Eat()
//{
// base.Eat();
//}
public override void Speak()
{
base.Speak();
}
}