和规范化

01作业using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace _01var作业推断类型
{
    class Program
    {
        static void Main(string[] args)
        {
            #region  int和string系统已经实现了IComparable接口的ComparaTo方法
            //System.Collections.ArrayList list = new ArrayList();
            //list.Sort();
            //string s = "ABCDEF";
            //string s1 = "abcdef";
            //Console.WriteLine(s.CompareTo(s1));
            //Console.WriteLine(string.Compare("a", "dfg"));

            //int n = 10;
            //int m = 34;
            //Console.WriteLine(n.CompareTo(m));
            //Console.ReadKey();
            #endregion

            //var s;  Error.隐式类型的变量必须初始化.因为编译器没法根据右侧进行类型推断。
            //var s = 23;
            //s = "";错误,无法将类型string隐式转换为int
            //Console.WriteLine(s.GetType());

            //装箱是值类型到引用类型,拆箱是引用类型到值类型。
            //把一个string赋给object既不是装箱也不是拆箱。他俩都是引用类型,这就类型转换
            //object s3 = 3434;
            //Console.WriteLine(s3.GetType());
            //Console.ReadKey();

            //1.var是类型推断;编译器在编译时已经将var替换成了对应的数据类型。IL中间语言已经将他们变为int,string,Person
            //2.var只能是局部变量,(方法中声明的变量),不能用作类的成员变量,不能用作方法的返回值,不能用作方法的参数。
            //var s;  Error.隐式类型的变量必须初始化.因为编译器没法根据右侧进行类型推断。
            //非泛型集合不能进行类型推断,泛型集合可以。
            var n = 100;
            Console.WriteLine(n);
            var m = "sdf";
            Console.WriteLine(m);
            var p = new Person();
            Console.WriteLine(p.ToString());
            Console.ReadKey();

            //1.使用var声明变量与直接使用对应的类型声明变量是完全一样的
            //int n = 3; var m = 3;完全一样
            //2.C#中的var与js的var完全不一样,C#中的var依然表示强类型,而js中的var是弱类型,且总是用它定义变量
            //3.强类型是在编译时(反编看看IL生成了什么)就已经能确定类型。弱类型是运行时才确定类型。js中 var i = 34; 然后还可以继续动态改变类型i= "ffdf";C#就不一样了,以后不能再赋其他值。
        }
    }
    public class Person
    {
        public string Name
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
    }
}02装箱拆箱
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Diagnostics;

namespace _02装箱和拆箱
{
    public class Program
    {
        static void Main(string[] args)
        {
            #region  装箱和拆箱
            //装箱是值类型到引用类型,拆箱是引用类型到值类型。
            //把一个string赋给object既不是装箱也不是拆箱。他俩都是引用类型,这叫类型转换
            //int n = 100;
            //string s = Convert.ToString(n); //没有发生装箱.因为这个方法和装箱有本质的区别。Convert是根据n先在堆中创造一个引用类型,将100装进去,然后让s指向这个地址。装箱是从拷贝到堆中。
            //int m = int.Parse(s);   //没有发生拆箱。Parse是根据字符串s直接创建一个整型,然后return到栈中。然后m来接收。
            //Console.ReadKey();

            //======上面通过调用Convert和Parse方法转型与拆箱装箱的区别=====装拆箱拷贝与Convert、Parse指针指向、新创建对象的区别!!====================
            //========装拆箱还是比较耗费资源的,效能低==但上面的方法直接创建新对象难道就不耗费资源吗=======
            //int n = 100;
            //object o = n; //把值类型赋给引用类型,这叫一次装箱。也就是值类型直接拷贝到堆里面,然后o指向这个引用类型的变量
            //int m = (Int32)o; //把引用类型赋给值类型,要先拆箱,显示转换一下。拆箱是把应用类型的值拷贝到栈里面。从堆扔到栈。如果没有指针再指向它,就等GC吧
            //int i = o as Int32; as必须用于引用类型或可以为null的类型
            //注意,装的时候用什么装的,拆的时候就得用哪个类型拆。。其实拆箱的代码部分只是右边的(Int32)o
            //Console.WriteLine(o.GetType()); //事实证明o变成了int32
            //Console.ReadKey();

            //Console.WriteLine("=============判断下面几行代码是否发生的装拆箱===========")
            //int n = 100;
            //Console.WriteLine(n); //wl方法有19个重载,反编译IL看到: L_0005: call void [mscorlib]System.Console::WriteLine(int32)//因此没有拆装箱
            //Console.WriteLine("张:{0},林:{1},李:{2}", 23, 23, 45);//装箱了。L_0025: call void [mscorlib]System.Console::WriteLine(string, object, object, object)
            //Console.ReadKey();
            //===================================
            //int n = 100;
            //object o = n;
            //Console.WriteLine(n+""+(int)o);  //这儿会调用Contact方法,因此装箱两次。String+=也一样,都会装箱

            //Equals是判断内容是否相同
            #endregion

            #region  装箱和拆箱的性能问题
            //==========非泛型集合的拆装箱耗时耗资源
            ArrayList arrInt = new ArrayList();
            Stopwatch watch = new Stopwatch();
            watch.Start();
            for (int i = 0; i < 10000000; i++)
            {
                arrInt.Add(i);
            }
            watch.Stop();
            Console.WriteLine(watch.Elapsed);

            //=======最好避免频繁的拆装箱===那就用泛型集合
            List<int> arrInt2 = new List<int>();
            Stopwatch watch2 = new Stopwatch();
            watch2.Start();
            for (int i = 0; i < 10000000; i++)
            {
                arrInt2.Add(i);
            }
            watch2.Stop();
            Console.WriteLine(watch2.Elapsed);
            Console.ReadKey();

            #endregion
        }
    }
    public class Person
    {
        public string Name
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
    }
}

03自定义泛型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _03自定义泛型
{
    public class Program
    {
        static void Main(string[] args)
        {
            MyClass<string, int, decimal, byte, string, object> mc = new MyClass<string, int, decimal, byte, string, object>();
            mc.SayHi("dsfdsfdsf");
            Console.ReadKey();
        }
    }

    //1.泛型类
    public class MyClass<T,K,V,W,Y,Z>
    {
        public void SayHi(T arg)
        {
            Console.WriteLine(arg);
        }
    }

    //2.泛型方法
    public class Class1
    {
        public void Sayello<T>(T msg)
        {
            Console.WriteLine(msg);
        }
    }

    //3.泛型接口
    public interface IFace<T>
    {
        T SayHi();
        void SayHello(T msg);
    }
    //实现泛型接口
    //1.普通类实现泛型接口
    public class Class2 : IFace<string>
    {
        public string SayHi()
        {
            throw new NotImplementedException();
        }

        public void SayHello(string msg)
        {
            throw new NotImplementedException();
        }
    }

    //2.泛型类实现泛型接口
    public class Class3<U> : IFace<U>  //这里的IFace<U>用泛型类中的U代替;当然IFace<U>中的U可以用其他类型stirng、int等
    {
        public U SayHi()
        {
            throw new NotImplementedException();
        }

        public void SayHello(U msg)
        {
            throw new NotImplementedException();
        }
    }

}

Powered by VisualSVN Ser

 

 
时间: 2024-09-18 05:52:04

和规范化的相关文章

JAVA程序生成XML文件的格式规范化,缩进,美化。

//开始把Document映射到文件 TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transFormer = transFactory.newTransformer(); transFormer.setOutputProperty(OutputKeys.INDENT, "yes"); //美化缩进!!!!!!!!!! //设置输出结果 DOMSource domSourc

规范化管理的企业主管职务意味着什么?

在规范化管理的企业内部,职务意味着责任.更意味着担当.而不是传统企业的领导脾气大.威风大.架子大.官腔大:不是指手画脚.不是居高临下.不是颐指气使.不是不负责任:而是更好地服务.更耐心地指导.更快捷地沟通.更果断地决策.更多更大担当! 可是,在传统企业待久了的员工,一旦有机会在规范化管理企业任职领导,他(她)不是带来好的管理.好的方法,而是带来不好的习惯.带来不负责的风气.带来会推卸的本事,更有甚者,居然还带来了会吵架的本领!好像不如此,就不能开展工作:好像不如此,就不能树立权威:好像不如此,就

android studio 学习笔记之 注释规范化

今天我们讲一下在android studio当中如何配置类注释和方法注释模板,让你的项目更加规范化,先来看看效果: 新建一个类的注释效果: 给一个方法的注释效果: 下面来将下实现步骤吧: File ->Settings ->File and Code Templates ->includes -> File Header 配置好之后,记得按下 Apply,这样在新建一个java类的时候,就会自动生成File Header 中的内容,自动添加你的注释模板中定义好了的注释了. 添加 j

短信群发市场一步步走向规范化

从2013年开始短信群发行业开始正式整顿,而且近年来,一年比一年更规范和严格,甚至屡屡遭到封杀.大家都知道一个新行业的出现,必然有一段鱼目混杂的时间段,然后就是一段整顿的过程,逐渐的使这个行业走向规范化. 短信群发市场也是一样的,前几年由于短信市场没有潜质的规范性,导致一些制造垃圾短信的小公司如雨后春笋般的出现,扰乱整个短信市场.幸而,国家连出政策打击和规范行业市场,使得很多广告短信公司坚持不住退出了,而退出的这些短信公司也恰恰大部分都是一些垃圾短信制造者.短信群发市场正在一步步走向规范化,相信

CSS XHTML规范化命名参考

CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left right center 登录条:loginbar 标志:logo 广告:banner 页面主体:main 热点:hot 新闻:news 下载:download 子导航:subnav 菜单:menu 子菜单:submenu 搜索:search 友情链接:friendlink 页脚:foote

规范化程序设计的实例(1)

提出问题 首先要感谢实验室的章老师提出一个有现实应用的背景与问题: 智能手机中,用户十分关心已经使用的流量, 希望可以查看已经使用的网络流量: 本程 序主要实现过去 1 分钟以及过去 1 小时已经使用的网络流总量,并且希望整个设计具备一定 的可扩展性,比如可以很方便地扩展到统计过去一天的网络流总量. 另外,程序在使用时还需要其运行速度和内存的使用情况. 学习目标: 1.  如何撰写可读性强的代码: 2.  基于性能和存储空间的代码优化设计: 3.  基于设计灵活性的代码优化设计: 概要: 1. 

Matlab 数据规范化代码

%% 数据规范化 clear; % 参数初始化: data = '../data/normalization_data.xls'; %% 读取数据 [data,~] = xlsread(data); %% 最小-最大规范化 data_scatter = mapminmax(data',0,1); % 数据需要转置 data_scatter = data_scatter'; %% 零-均值规范化 data_zscore = zscore(data); %% 小数定标规范化 max_ = max(a

规范化-数据库设计原则

关系数据库设计的核心问题是关系模型的设计.本文将结合具体的实例,介绍数据库设计规范化的流程. 摘要 关系型数据库是当前广泛应用的数据库类型,关系数据库设计是对数据进行组织化和结构化的过程,核心问题是关系模型的设计.对于数据库规模较小的情况,我们可以比较轻松的处理数据库中的表结构.然而,随着项目规模的不断增长,相应的数据库也变得更加复杂,关系模型表结构更为庞杂,这时我们往往会发现我们写出来的SQL语句的是很笨拙并且效率低下的.更糟糕的是,由于表结构定义的不合理,会导致在更新数据时造成数据的不完整.

站内优化之页面头部代码规范化的重要性

头部代码非常重要!错一点都会导致百度抓取出现故障说到代码就要谈到模板了,我相信非常多的人也好,企业也好,做的站点都是复制别人的代码居多,这就产生一个问题,模板代码严重相似,特别是经过2013年年底泛站群攻击以后,百度立既改变了算法,把大量相似的代码站点例入垃圾站,这给一些小站点造成非常大的麻烦,每天更新,发外链,比别人复出一倍,排名却仍然停留不前,你有想过能否从本文找到一些原因吗,假设能给你一些启示,也不浪费我的文笔了. 一个页面的代码,头部非常重要,可是这里指的头部并非我们在源码中看到的hea

vscode 中使用php-cs-fixer和PHP Formatter 插件规范化PHP代码

什么是PHP-CS-Fixer? 它是php-fig组织定义的PHP代码规范,良好的代码规范可以提高代码可读性,团队沟通维护成本 使用它可以按照指定的规范格式化您的PHP代码,此工具不仅可以检测有不符合规范的代码,而且还可以修复它们 1.使用php-cs-fixer.phar格式化php文件 1.下载php-cs-fixer.phar到任意目录,尽量放到php目录下) 2.在VScode里手动调用php-cs-fixer.phar进行格式化 2.在Vscode里PHP Formatter 插件