1.VS提供代码片段,可以快速输入想要的内容,比如输入mbox然后按两下tab,可以快速插入对话框。如果想知道有哪些快捷键,可以在右键,插入片段中找到。
2. 我们在实际编码中有时会用到as关键字来将对象转换为指定类型,与is类型不同的是,is关键字是用于检查对象是否与给定类型兼容,如果兼容就返回true,如果不兼容就返回false。而as关键字会直接进行类型转换,如果转换成功会返回转换后的对象,如果转换不成功则不会抛出异常而是返回null。as只能用于继承树中的类之间进行转换,否则VS就直接报错啦。Student s = p as Student;
3.接口成员访问修饰符默认为public,且不能显示使用访问修饰符。构造函数默认为public访问修饰符。 析构函数不能显示使用访问修饰符且默认为private访问修饰符。 类的成员默认访问修饰符为private;枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。结构成员默认为private修饰符。 结构成员无法声明为protected成员,因为结构不支持继承。嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致。
接口中不允许出现字段,只允许自动属性(set;get;没有大括号,因为接口成员不能有定义,所以在子类中要定义字段来具体实现)。属性的setget也是没有实现体的函数,所以本质上讲接口只允许出现方法。
如果继承中既有接口和类,则类必须放在最前面。
当继承多个接口时,接口中存在相同的方法,此时可以进行显示实现。
using System;
namespace ConsoleApp1
{
class Program
{
public static void Main(string[] args)
{
A a = new Person();
B b = new Person();
//根据赋值对象不同调用不同的方法
a.func();
b.func();
}
}
class Person : A, B
{
//分别实现A和B接口中的Func函数
void A.func()
{
Console.WriteLine("A");
}
void B.func() //注意这里不能有修饰符,因为他实现的是接口的内容。用子类的对象是无法访问的。
{
Console.WriteLine("B");
}
}
public interface A
{
void func();
}
public interface B
{
void func();
}
}
4.ArrayList和HashTable在System.Collections中。Dictionary在System.Collections.generic中。
ArrayList list = new ArrayList(); //有多个构造函数可以选择
list.Add(1);
list.Add(new Person());
list.Add("hello");
list.Remove(1);
list.Insert(0, "InsertData");
foreach(var v in list)
{
Console.WriteLine(v);
}
IEnumerator ie = list.GetEnumerator();
Console.WriteLine("---------IEnumerator");
while (ie.MoveNext())
{
Console.WriteLine(ie.Current);
}
Console.WriteLine("----------HashTable");
Hashtable ht = new Hashtable(3);//定义只有3个元素的HashTable
ht.Add(1, "hello");
ht.Add("new", "newdata");
//ht.Add("new", "newData"); 如果定义相同的键值则会异常
ht["new"] = "newnew"; //这样如果没有则新加,如果有替换新的值
foreach(var v in ht.Keys)
{
Console.WriteLine(ht[v]);
}
Console.WriteLine("----------Dictionary");
Dictionary<Int32, String> d = new Dictionary<int, string>();
d.Add(1, "ABC");
d.Add(2, "EFG");
d.Remove(2);
foreach( var v in d.Keys)
{
Console.WriteLine(d[v]);
}
《完》