ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: excelhomesnake

[分享] 最基础的教学

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2016-2-26 15:19 | 显示全部楼层
excelhomesnake 发表于 2016-1-20 12:54
类          通过之前的内容,已经了解到,我们用.net,实际上就是在创建属于我们自己的程序集.按照层次,就是 ...

持续关注中......

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-27 11:10 | 显示全部楼层

感谢支持.过年后一直在忙,人也懒了,都没有抽什么时间来更新.

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-27 19:19 | 显示全部楼层
本帖最后由 excelhomesnake 于 2016-2-27 19:26 编辑

书接上一回

属性,方法
假设使用以下用例.
用例:用户输入两个数字,系统计算出数字的加法运算后的结果.
这是个非常简单的用例.设计一个加法类(Addition),里面有两个记录数字的属性,一个是计算结果的方法.
以下是具体过程:
1.       首先创建一个控制台项目,然后往这个项目添加一个类文件.如下图1
2.       添加类文件的时候,其实把相应的文件名字修改为类名字,创建后的cs后缀的文件,会自动写上命名空间和类的定义代码.但我这里为了演示代码段的使用,特意把命名空间和类定义代码给去掉,然后重新填写.可以看图2.
定义命名空间只要打上关键字namespace,然后连续按两下tab,vs就会帮我们创建好代码,光标还会定格在命名空间的名字上.类的定义一样道理(class+两下tab)此外,我还定义了一个属性LeftNumber,同样使用代码段(这里我使用的是传统的属性定义,使用propfull+两下tab)
3.       图3,我继续使用代码段来定义了一个RightNumber属性(这里我使用的是一个语法糖,使用prop+两下tab).另外我还定义了一个方法,同样使用代码段,但这个代码段是我自己写的,大家恐怕使用不了.稍后我会介绍如何创建自己的自定义代码段.
4.       图3,我特意为了演示一下if的代码段,所以加了一个条件,当数字小于0的时候,使用0来计算结果.
5.       整个代码过程,我没有自己输入花括号{}

(1)

图1

图1


(图2)

图2

图2


(图3)

图3

图3



补充:
  • 留意看图2中,定义一个传统的属性,使用代码段后,你会发现有多个位置需要我们自己来定义,因此代码段有3个高亮区,一开始是停在第一个高亮区,这个时候你只需要按一下tab键,就可以跳到下一个高亮区.
  • 上例为了排除很多干扰的东西,因此把类特意设计为两个属性一个方法.请大家暂时别纠结如何分析和设计对象.

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-27 19:47 | 显示全部楼层
代码段
上一贴已经认识到vs的代码段功能如何强大了,这是高效率的主要武器.本节就介绍一下,如何知道还有哪些内置的代码段,和如何创建自定义的代码段.
(图1)

图1

图1
(图2)
代码段_2.png
通过以下路径,打开代码段管理器:
菜单 -> 工具 -> 代码段管理器
1.       留意最上方的语言选择.另外,你会发现vb.net有很多内置代码段(大概是因为关键字众多吧),不可否认的是,vb.net的智能列表还是比C#要强一点(看得出来,两个语言的智能列表不是同一组人员编写的)
2.       位置的那一栏,显示这每个分类的代码段,是放在哪个文件夹中.我们到具体的文件夹,复制一个出来,研究一下,就知道如何编写自定义的代码段了.
3.       我们从vs的代码段目录下,随便找一个代码段文件,你会发现是.snippet后缀,其实这些文件都是xml文件,用记事本都可以打开,当然,我是直接使用vs来打开,因为vs可以自动缩进xml内容的.
4.       具体如何定义,我这里就不详细说明了,因为实在是很简单.这里我附上定义方法的自定义代码段.在代码段管理器中,导入按钮,然后接着操作,就可以顺利添加的.
5.       如果你有兴趣,可以到微软的帮助网页上,找到很多关于代码段的设计.但遗憾的是,很多高级功能只支持vb.net.

Function.rar

594 Bytes, 下载次数: 83

方法代码段

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-3-2 15:57 | 显示全部楼层
excelhomesnake 发表于 2016-2-27 19:47
代码段上一贴已经认识到vs的代码段功能如何强大了,这是高效率的主要武器.本节就介绍一下,如何知道还有哪些 ...

这个很有用!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-3-2 17:47 | 显示全部楼层

是的,这个对编写代码的速度有很大的提升.可惜的是,在方法调用的括号内是不能使用代码段,因此写lambda表达式有时候还是要自己打花括号.

另外,如果你有使用Resharper这个插件的话,ctrl+shift+enter,是很好用的快捷键,它会自动在本句代码结尾添加分号并把光标移动到下一行.

TA的精华主题

TA的得分主题

发表于 2016-3-3 00:44 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-3-3 16:04 | 显示全部楼层
带劲儿 发表于 2016-3-3 00:44
建议加精或者加技术!

感谢支持,本帖内容都是非常基础的东西,对入门者有帮助就ok了.

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-3-3 17:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 excelhomesnake 于 2016-3-3 17:59 编辑

调用类,强类型,类型转换.
本帖在开始写的时候,是考虑最后一点是介绍多态的应用.但思前想后,多态的应用与”基础”二字相差遥远,因此决定另外开一个贴是介绍多态等知识的.
作为本帖的结尾章节,也是为了下一贴的准备知识,就说一下类型方面的知识.事实上本帖到这里开始才算真正涉及到编写代码
从我到这个板块看到的问题贴,有不少童鞋是连类型都还没有搞清楚就写出来一个个功能,说是厉害,一旦遇到问题而没有在网络上找到一致的解决方法,就不能继续写下去了.

作为简单的例子,我们先创建一个Person类,其中有属性Name,Age.一个Computer类,其中有一个属性SystemName

如下:

  1.     class Person
  2.     {

  3.         public string Name
  4.         {
  5.             get;
  6.             set;
  7.         }

  8.         public int Age
  9.         {
  10.             get;
  11.             set;
  12.         }

  13.     }


  14.     class Computer
  15.     {

  16.         public string SystemName
  17.         {
  18.             get;
  19.             set;
  20.         }

  21.     }
复制代码


如果你有看本节之前的内容,写上这些代码,应该不会超过10秒.

那么如何使用这个类?
1.      实例化为对象.New 类名字()
2.      使用一个类型匹配得上的变量保存步骤1实例化的对象的引用.
代码如下:
  1. Person ps = new Person();
复制代码

这里补充一下一些比较深入的知识.变量到底保存了什么?
注意,变量不是直接保存对象的.

简单来说,变量保存两个信息
1.      对象的引用(可看作是对象的一个身份id)
2.      变量的类型.

变量的类型决定了你在使用变量的时候,可以有什么样的操作(就是属性或方法).
对象的引用决定了这个变量在操作哪个对象.

根据上面两点,定义变量的时候,必须要定义好这个变量的类型,然后才可以让这个变量去保存类型匹配得上的对象.例如这样子:

  1.             Person ps;

  2.             ps = new Person();
复制代码

         注意:以上代码在执行了第一句后,在第二句执行之前,这个变量的类型信息已经有了,但却没有对象的引用.因此这个变量的引用是为null(vb.netnothing).我们称之为空引用.空引用问题是这些语言的一个很严重的问题,因为它不能在编译时检测出来,只能推迟到运行时才会发现错误,但那个时候已经是程序的报错了.

当然,C#或vb.net是可以在定义的时候直接写上赋值的操作.因此也可以如下:
Person ps = newPerson();

注意:这里另外说一个很有趣的东西,上面的赋值语句其实是有返回值的,上面的代码最终会返回那个变量.这一点对于你将来学一些语言的知识会有一些小帮助.

因此,如下的代码也可以成立:

  1.             Person ps1;
  2.             Person ps2;

  3.             ps1 = ps2 = new Person();
复制代码


类型匹配
到这里就有个问题了,到底怎样才算类型匹配?
简单来说为几点:
1.      变量类型与对象类型一模一样.
2.      变量类型与对象类型有关系.

一模一样是很好理解的.”有关系一般是指两种:
1.      继承关系.变量的类型是父类,对象类型是子类.
2.      接口关系.变量的类型是接口类型,对象类型是实现了这个接口的类型.

这里的重点其实是,必须保证之后的代码,在调用这个变量的某个方法(或属性)的时候,指向的对象一定要存在这个方法(或属性),这样的规则保证变量的类型包含了对象的所有的特征.

因为上面说的两种关系刚好是语言规则下都是符合这样规则,所以才能成立.
看个例子:

  1.             //不成立,因为两边类型不一致
  2.             Person ps1 = new Computer();

  3.             //成立,因为在.net中,所有的类都默认继承于object
  4.             object obj = new Person();
复制代码

说明:
1.      第一句不成立是因为类型不一致.留意看vs的错误提示,说是类型不能转换.

2.      第二句成立是因为object是所有类型的父类,一个父类的变量可以接受一个它的子类的对象.因为,在面向对象语言规定,子类包含了父类所有的成员(方法,属性,事件之类的).因此,如果我在下面继续写代码去使用变量obj,这个时候我可以使用的方法肯定在Person类型的对象中也会有的(例如ToString()方法).

3.      这里的一个重点是,object是所有类型的父类.你会发现,刚刚定义的Person类,使用的时候会多出几个方法.那些多出来的方法就是从object那里继承过来的.初学者刚了解继承的特点,很容易就会想到这样可以复用很多代码啊.但这样想是错误的,继承的概念不是为了重用代码.因此我是建议先学接口类型,再去学继承的.

初学者可以先确保类型要一模一样.之后了解了继承和接口的知识,就自然懂得那些道理.


类型转换
C#,类型是可以转换,分为显示转换隐式转换”.
显示转换是指这个转换本身是有可能导致运行时由于类型问题而出现的错误.因此这样的转换必须编写者在代码中明确指示才可以成立.

隐式转换是指这个转换是安全的,不会在转换后产生运行时由于类型问题而出现的错误.因此这样的转换不需要特别写出什么的指令.就如之前的内容,Person对象赋值给object变量,也是一种安全的类型转换.

这里就不详细介绍显示转换了,可以参考本板块的一些基础贴.这里说一下隐式转换中的安全是怎样理解.关于引用类型,在之前的内容已经有说明了,关于值类型也是类似的.例如,int可以安全转换到double.反过来就不行了.因为double转换int会丢失小数点后的数据.

一些基本的语法,建议参考以下贴:
http://club.excelhome.net/thread-1259984-1-1.html


TA的精华主题

TA的得分主题

发表于 2016-5-11 12:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
好贴,太科普,谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 19:11 , Processed in 0.039605 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表