C#基础概念二十五问 21-25

2016-02-19 11:08 2 1 收藏

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐C#基础概念二十五问 21-25,赶紧看过来吧!

【 tulaoshi.com - 编程语言 】

21.P/Invoke是什么?
答:
在受控代码与非受控代码进行交互时会产生一个事务(transition) ,这通常发生在使用平台调用服务(Platform Invocation Services),即P/Invoke
如调用系统的 API 或与 COM 对象打交道,通过 System.Runtime.InteropServices 命名空间
虽然使用 Interop 非常方便,但据估计每次调用事务都要执行 10 到 40 条指令,算起来开销也不少,所以我们要尽量少调用事务
如果非用不可,建议本着一次调用执行多个动作,而不是多次调用每次只执行少量动作的原则

22.StringBuilder 和 String 的区别?
答:
String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String
另外,对于 String 我们不得不多说几句:
1.它是引用类型,在堆上分配内存
2.运算时会产生一个新的实例
3.String 对象一旦生成不可改变(Immutable)

3.定义相等运算符(== 和 !=)是为了比较 String 对象(而不是引用)的值
示例: 

using System;
using System.Collections.Generic;
using System.Text;
namespace Example22
{
    class Program
    {
        static void Main(string[] args)
        {
            const int cycle = 10000;
            long vTickCount = Environment.TickCount;
            String str = null;
            for (int i = 0; i  cycle; i++)
                str += i.ToString();
            Console.WriteLine("String: {0} MSEL", Environment.TickCount - vTickCount);
            vTickCount = Environment.TickCount;
            //看到这个变量名我就生气,奇怪为什么大家都使它呢? :)
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i  cycle; i++)
                sb.Append(i);
            Console.WriteLine("StringBuilder: {0} MSEL", Environment.TickCount - vTickCount);
            string tmpStr1 = "A";
            string tmpStr2 = tmpStr1;
            Console.WriteLine(tmpStr1);
            Console.WriteLine(tmpStr2);
            //注意后面的输出结果,tmpStr1的值改变并未影响到tmpStr2的值
            tmpStr1 = "B";
            Console.WriteLine(tmpStr1);
            Console.WriteLine(tmpStr2);
            Console.ReadLine();
        }
    }
}
结果:
String: 375 MSEL
StringBuilder: 16 MSEL
A
A

A

23.explicit 和 implicit 的含义?
答:
explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换
explicti 表示显式转换,如从 A - B 必须进行强制类型转换(B = (B)A)
implicit 表示隐式转换,如从 B - A 只需直接赋值(A = B)
隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端
示例: 
using System;
using System.Collections.Generic;
using System.Text;
namespace Example23
{
    class Program
    {
        //本例灵感

来源:https://www.tulaoshi.com/n/20160219/1596629.html

延伸阅读
现在的人们都十分注重养生,下面就来给大家推荐二十五个中医的养生传统秘方。 1、牙齿变白:刷牙时在牙膏上加上一点小苏达,刷三次后牙齿洁白如玉,牙锈自然脱落。 2、怎么戒烟:槟榔一只,钻个小孔,再往小孔里灌入一点烟代油用水泡两天取出凉干,想吸烟时,闻一下就不吸了,谁闻都可以戒烟。 3、 怎么醒酒:醋、白糖、茶叶水...
胎儿在十六周时的发育情况 16周的胎儿身长大约有12厘米,体重增加到150克,胎儿此时看上去象一个梨子。宝宝在本周发生的最大的事情就是他(她)自己会在您的子宫中玩耍了,宝宝在子宫中最好的玩具就是脐带了,他(她)有时会拉它,用手抓它,将脐带拉紧到只能有少量空气进入。但是不必太担心,16周的宝宝自己以有分寸,他(她)不会让自己一点空气和...
中国人过年习俗 腊月二十九蒸馒头   在过去,老北京流传着这样一首民谣: 小孩 小孩你别馋,过了腊八就是年。腊八粥,过几天,哩哩啦啦二十三。二十三,糖瓜儿粘;二十四,扫房日;二十五,做豆腐;二十六,炖白肉;二十七,宰公鸡;二十八,把面发;二十九,蒸馒头;三十儿晚上熬一宿;大年初一去拜年。其...

经验教程

350

收藏

52
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部