C# 学习之旅(一)

来源:互联网 发布:weka 自定义 分类算法 编辑:程序博客网 时间:2024/05/22 12:40

    做项目需要用到一些c#的知识,学一波顺便mark一下一些和c/c++不太一样的地方


    首先有可能第一次打开VS2015的时候找不到创建c#的控制台程序,怎么做呢?

    这时候应该打开安装目录下的Common7-IDE文件夹,打开devenv.exe程序,那么就能找到创建控制台的c#程序了



    c#中的string类型是你在初始化的时候就固定长度了的,而它的一些常用的操作比如append()方法,erase()方法等一些需要改变原来长度的操作时候,string是会把原来的删除,重新生成的,这样带来的开销是很大的,为此,c#中有另外一个string类型叫StringBuilder,new一个新的StringBuilder()那么就和正常的string一样的用法了。

    这里有一个比较特别的方法叫AppendFormat(),它的第一个参数是一个“格式”,“格式”加一个大括号,里面的数字i从0开始计数,对应接下来的第i+1个参数,比如里面的s.AppendFormat("nihao{0} {1}", "gz", "hu"),那么大括号里面的0就是gz,1就是hu对应下来

     在实际操作中,可能你使用string和StringBuilder的感觉是差不多的,但是对于电脑的运算来说是不一样的,如果字符串的长度固定好就不再改动,那么推荐使用string,而如果某字符串的长度要经常性的修改,那么推荐使用变长的StringBuilder类型

            StringBuilder s = new StringBuilder();            s.Append("asd;jasd");            s.AppendFormat("hello {0}", "world\n");            s.AppendFormat("nihao{0} {1}", "gz", "hu");            Console.WriteLine(s);


方便的数字转字符串函数,字符串转数字函数

在以前做ACM的时候经常有数字字符串需要互转的时候,有点麻烦,而c#提供了一些方法可以直接让两者互相转换

            int i = 10;            string s = i.ToString();       //int类型有一个方法叫 ToString()可以直接转成字符串            Console.WriteLine(s);            //字符串有三种方法可以转成int            //调用Convert这个类的ToInt32方法,和调用Int32类的Parse方法,但如果输入的参数不正确的话会直接报错            int j = Convert.ToInt32(s);            Console.WriteLine(j);            int k = Int32.Parse(s);            Console.WriteLine(k);            //Int32的TryParse方法两个参数,第一个是待转换的字符串,第二个是存放的地方            //好处在于如果待转换的字符串不符合规范,那么它也不会报错,而是给p赋值一个默认的0            int p;            bool flag = Int32.TryParse("sdf", out p);            Console.WriteLine(p);




接下来是抽象类和接口的问题

    在C#中,一个类可以有多个接口,但只能有一个继承的类。

    一个类中的接口必须在这个类中重写接口里面的方法,而继承了抽象类的抽象方法也必须重写。

     如果继承了抽象类中,里面的方法不是抽象的方法,那么不需要重写。

     接口中不允许有数据段,而抽象类仍然是一个类,可以有数据段和自己的方法。


class Man:Person,ISuper{    public override int GetAbstract()    {        return 5;    }    public int GetSuper()    {        return 5;    }}abstract class Person{    public string name;    public string Getname()    {        return name;    }    public abstract int GetAbstract();}interface ISuper{    int GetSuper();}



C#中一些保存集合的数据结构

  首先数组和C++类似不介绍,然后是类似于数组的ArrayList和List

   ArrayList是弱类型的数据结构,里面可以存放不同数据类型的数据,比较方便,但由于取出数据类型的不确定性,容易发生错误,而List<>是一种强类型的数据结构,创建的时候必须定义好里面存放的是什么数据

            //ArrayList是弱类型的数据结构,里面可以保存不同类型的数据            ArrayList a = new ArrayList();            a.Add(5);            a.Remove(5);            a.Add("asduiohasod");            foreach(var i in a)            {                Console.WriteLine(i);            }            List<int> aa = new List<int>();            aa.Add(65);            aa.AddRange(new int[] { 501, 502 });            //寻找value为501的索引            Console.WriteLine(aa.IndexOf(501));            //判断List里是否有501的数据            Console.WriteLine(aa.Contains(501));            aa.Remove(501);            aa.Insert(1, 1001);


Hashtable和Dictionary

    Hashtable类似c++里面的map,但同样它是弱类型的,即支持里面存放不同数据类型的数据,访问里面的数据和c++的map是一样的,而Dictionary则是强类型的,如同c++里面的map,需要声明的时候给定存放的数据类型


            Hashtable ht = new Hashtable();            ht.Add("hf", "123");            ht.Add(100, 100);            Console.WriteLine(ht["hf"]);            Dictionary<string, string> d = new Dictionary<string, string>();            d.Add("5", "5");


SortedList

    类似c++中的set,里面的元素按照key的值大小排序,和插入的顺序无关

            SortedList<int, int> s1 = new SortedList<int, int>();            s1.Add(1, 1);            s1.Add(0, 2);            foreach (var i in s1)                Console.WriteLine(i.Key);


0 0