C# 学习之旅(一)

    做项目需要用到一些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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值