已采纳回答 / CashQQJ
题主所指的new是子类里隐藏父类方法的关键字,不是新建实例关键字。virtual是虚函数关键字,修饰父类里的函数,子类可以用override重写该函数。virtual一般用在父类里,new一般用在子类里,其是成员修饰符。public是访问修饰符,用来限制访问权限。在c#里还有一种修饰符是类修饰符,例如:abstract。书写顺序习惯上一般是:访问修饰符 + 类修饰符,或者:成员修饰符 + 类修饰符但是不按照上面的顺序书写,编译器也不会报错,只是不太常用而已。
2018-04-18
已采纳回答 / 汤姆oldTom
因为oi是Object类型的变量(或者叫引用),所以可以先将它转化为字符串类型后再输出打印,然后oi这个变量输出的3就是字符串类型的而非Object类。
2018-04-15
new 和 virtual/override 的区别 :
new :
1.基类的引用指向派生类的实例,调用基类的方法;
2.派生类的引用指向派生类的实例,调用派生类的方法;
virtual/override :
1.基类的引用指向派生类的实例,调用派生类的方法;
2.派生类的引用指向派生类的实例,调用派生类的方法;
new :
1.基类的引用指向派生类的实例,调用基类的方法;
2.派生类的引用指向派生类的实例,调用派生类的方法;
virtual/override :
1.基类的引用指向派生类的实例,调用派生类的方法;
2.派生类的引用指向派生类的实例,调用派生类的方法;
2018-04-11
public void isHappy<T>(T target){
console.WriteLine("happy:"+target.ToString());
}
定义一个人的类 class Person{}
使用 var dog = new Dog("A");
dog.isHappy<Person>(new Person());
dog.isHappy<int>(3);
console.WriteLine("happy:"+target.ToString());
}
定义一个人的类 class Person{}
使用 var dog = new Dog("A");
dog.isHappy<Person>(new Person());
dog.isHappy<int>(3);
public class Cage<T>{
T[] array;
readonly int Size;//大小
int num;//装了多少
public Cage(int n){Size = n;
num = 0;
array = new T(Size);
}//构造涵数
public void Putin(T pet){
if(num < Size){array[num++]=pet;}
else{Console.WriteLine("cage is full")}
}
} readonly 只读的
T[] array;
readonly int Size;//大小
int num;//装了多少
public Cage(int n){Size = n;
num = 0;
array = new T(Size);
}//构造涵数
public void Putin(T pet){
if(num < Size){array[num++]=pet;}
else{Console.WriteLine("cage is full")}
}
} readonly 只读的