乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 125|回复: 9

[分享] 零起点学习C#--小猫自学笔记

[复制链接]

71

主题

462

帖子

10

银币

中流砥柱

Rank: 25

铜币
748
发表于 2009-6-24 20:23:00 | 显示全部楼层 |阅读模式
我的水平:只会vlisp开发,外加一点点VBA的水平.Visual studio 从来没用过.C#一点概念也没有.....
5年前学过一阵子C语言,当时也没学会(数组都不会写),现在已经忘的差不多了.
可能有些想学习C#的朋友和我的水平差不多,我在这里写个人的零起点C#学习笔记,
为了鞭励自己,也和各位分享我的学习方法,(学习么,就是痛并快乐着.....),
文中必然错误连篇,希望各位C#高手不吝指点,小猫我感激不尽.
下文会不定期更新,我用的是VS2005 VS2008 + MSDN(可以到迅雷里面搜索下载)
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2009-6-24 21:13:00 | 显示全部楼层
Lisp版的小猫是精彩,C#版的小猫会同样精彩:)
实际上都是这样走过来的,翻翻以前的帖子
有很多是菜鸟lzh和菜鸟ahlzl的帖子:)
期待nonsmall的精彩好文
回复

使用道具 举报

71

主题

462

帖子

10

银币

中流砥柱

Rank: 25

铜币
748
发表于 2009-6-24 21:16:00 | 显示全部楼层
咱们先学习C#基础 然后再学AUTOCAD的二次开发.
注:下面的个人理解未必正确,是辅助我学习的一种办法,以后都会慢慢清楚的.
安装好VS+MSDN之后,第一次开启VS会选择开发模板,选择C# 进入.
[文件]-[新建]-[项目]  [Visual C#]的[控制台应用程序].
VS2008下 会出现下面的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Study
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
(我感觉C#的语法很像C,里面的概念又有VB的.)
using是什么呢? 我要查帮助,点[帮助],再点[动态帮助],右面就有一个帮助页面,
我点一下using代码,右面就出现了using的帮助.
using的说明如下:
作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。请参见
using 指令。
作为语句,用于定义一个范围,在此范围的末尾将释放对象。请参见
using 语句。
根据里面的说明,这里就是 using 指令 :
允许在命名空间中使用类型,这样,您就不必在该命名空间中限定某个类型的使用.
什么是命名空间?
大多数 C# 应用程序从一个 using 指令节开始。该节列出应用程序将会频繁使用的命名空间,避免程序员在每次使用其中包含的方法时都要指定完全限定的名称。我的理解:  暂时认为类似分开的几个.lsp文件用(load ...)函数引入吧.
system 先不管了,应该是引用系统的类,回头再研究.
namespace 刚才的帮助里面也说了,是定义一个命名空间,
Class 是定义类 ,类其实就是 函数的载体,只是使用时需要初始化而已.感觉在lisp-VBA里面我们用的 "方法" 就是类生成的.
static 是静态定义函数,这个可以看看帮助,里面说的内容不大理解,先放着(既然有静态应该就有动态吧?).
void 叫无返回值 相当于(princ)的作用
Main 是定义主函数(程序入口) 就像Lisp里面C:定义函数
string[] args 应该是函数 至于为什么这么写我没查到,哪位高人给讲讲?
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2009-6-24 21:36:00 | 显示全部楼层
C#里只有类,这一点和VB、C都不太一样
所谓类,即定义一个抽象的概念,比如人类people
nonsmall是people的一个实例,lzh同样也是
我们有不同的习惯,必须调用不同的方法
必须这样调用
nonsmall.DoIt();
但我们有共同的东东,比如都在地球上,使用静态属性或方法描述他
people.Location = "earth";
string[] args 声明数组,Main函数的形参
回复

使用道具 举报

71

主题

462

帖子

10

银币

中流砥柱

Rank: 25

铜币
748
发表于 2009-6-24 22:09:00 | 显示全部楼层
复制代码谢谢lzh741206大版主的支持,我相信只要坚持+方法就能学好!
大家要准备一本 > 做为自学入门材料.我现在正在看这个.
其他的除了C# 开发 AutoCAD很少之外,C#方面的书籍是很多的.
--------------------------------------
我们开始在Main 函数里面加代码!
c# 对大小写敏感 一定要注意 而且经常后面要加个分号,从Lisp转过来还得适应.
因为在建立项目的时候我建立的名称是Study 所以命名空间是Study , 默认应该是ConsoleApplication1
这个无所谓
namespace Study
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("加油,你一定能学好C#!");
            Console.ReadKey();
        }
    }
}
console 是控制台, 第一句是输出文字,第二行是等待按键输入.
我们按F5运行看结果 然后按任意键退出
好 第一个C#程序已经写好并且运行了!!
按照书中讲的内容看一下其他的部分,前两章我们就可以Pass了.
回复

使用道具 举报

52

主题

380

帖子

11

银币

中流砥柱

Rank: 25

铜币
588
发表于 2009-6-25 08:57:00 | 显示全部楼层
C#的书倒是买了两三本。
关于C#的电子书确实也比其CAD二次开发的多N多。
有了nonsmall一起加入C#,太好了。
向你学习。
昨天找到了一个C#在线教程[url=http://www.ameng.org/]Visual C# 2008 宝典[/URL]   
我觉得还可以,推荐给大家。
之前是看“楚广明的C#视频教程”(搜索一下verycd应该有的下载)
也可以上我的网盘上下载 http://carrot1983.ys168.com/复制代码有人同伴感觉更有动力。。。
回复

使用道具 举报

71

主题

462

帖子

10

银币

中流砥柱

Rank: 25

铜币
748
发表于 2009-6-25 10:47:00 | 显示全部楼层

有人同伴感觉更有动力。。。
哈哈 carrot 先行一步,我还得从基础的来.
今天学习变量规则和语法.定义方法如下:
;
这里和Lisp不同的是需要每个变量的使用都必须事先声明其类型然后使用.
对于各种类,必须实例化(实例化我理解就是定义一个对象变量引用(初始化)类,然后才可以引用)
(setq shell (vlax-create-object "Shell.Application"))
类似这样的初始化才能使用shell对象.这个后面再详细学习.先从基础的开始.
简单类型定义包括:
sbyte byte short ushort int uint long ulong
恩 相似的变量二进制位数相同 观察一下 后面的都是>= 0的
还有float double decimal char bool string
字符串输出方法一是和Lisp一样的加\对应特殊的符号
二是加个@
变量赋值直接是一个等号 = 等于用2个等号 ==
类型定义可以连续定义
int a, b;
可以直接初始化
int a = 1, b = 2;
运算符:
+ - * / 求余%  加一++ 减一--
控制台输出变量方法:
string a = "hh", b = "oo"; //定义和初始化
Console.WriteLine("out {0} {1} .", a, b); //带参数输出
Console.ReadKey(); //等待按键退出
组合简化运算:
+= -= *= /= %=
另外
int i = 1;
int j;
j = ++i;是先加后传递
j = i++;是先传递后加
等于== 不等于!= 大于> 小于= 小于等于>
goto函数 这个东西凡是教材都不推荐用,我感觉以后写小程序时应该会方便吧.
....
goto over;
(跳过的部分)....
over:
....
当然也可以向前跳.
if 语句和Lisp不同的是 简化了嵌套的if
(if a
b
(if c
  d
  e
)
)
可能对应
if (a)
            {
                b;
            }
                else if (c)
                {
                    d;
                }
                    else
                    {
                        e;
                    }
这样?
switch 函数相当于(cond)
里面要用Break;退出
若想一个switch里面执行多行的
就可用goto跳下去!
循环包括 while, do while, for
while 不说了 do while是先执行一次然后判断,for就代替了(repeat).
for (int i = 1; i
OK 上午先学这点 下午继续.这些东西记得有哪些即可 慢慢就熟悉了 不必死记.
回复

使用道具 举报

71

主题

462

帖子

10

银币

中流砥柱

Rank: 25

铜币
748
发表于 2009-6-25 12:59:00 | 显示全部楼层
类型转换:
高位数转为低位数的需要写出来
float a;
(int) a;
还有一些就是用
Convert类里面的ToDouble ToInt32 ToChar之类的进行转换
学习不要太紧张,轻松一下,Console类的帮助查看了一下,其中有一个成员是Beep,可以让电脑主板发声.
我就根据前面学的已有知识尝试写个简单的发声的代码:
while (true)
            {
                Console.Beep((Convert.ToInt32(Console.ReadLine()) + 40) * 50, 1);
            }
每当输入一个数字然后敲回车之后,主板就会叫一声.音量不一样的.
至于这个死循环的退出,和DOS一样,就是Ctrl+C退出(这个帮助里面的Console类的事件也写了)
怎么才能按一个数字就发出一个声音?这个没研究出来.(那样就可以谈琴了 hoho).
回复

使用道具 举报

71

主题

462

帖子

10

银币

中流砥柱

Rank: 25

铜币
748
发表于 2009-6-25 16:16:00 | 显示全部楼层
枚举:
(就是特殊的一类数值用变量打成一个包)
enum haha { a = 1, b, c }; //要写在namespace外面
for (int i = 1; i
====================
结构:
这个看起来应该是把不同类型的数据打成一个包.(如年龄 身高 体重 性别 婚否....)
结构具有以下特点:
结构是值类型,而类是引用类型。
向方法传递结构时,结构是通过传值方式传递的,而不是作为引用传递的。
与类不同,结构的实例化可以不使用 new 运算符。
结构可以声明构造函数?,但它们必须带参数。
一个结构不能从另一个结构或类继承,而且不能作为一个类的基?。所有结构都直接继承自
System.ValueType,后者继承自 System.Object。
结构可以实现接口?。
在结构中初始化实例字段?是错误的。
其中有几句不大理解.没关系 先学会模仿着使用基本的^_^
为了让外面访问,定义结构体需要用Public关键字
struct hehe//这段还是要写在外面
{
    public haha ha;
    public int num;
}
     hehe tmp;//实例化
            tmp.ha = haha.a;//按类型赋值
            tmp.num = 5;
            Console.WriteLine("{0}-{1}", (int)tmp.ha, tmp.num);//输出
输出结果:1-5
(恩 学东西的时候,尽量自己改个字母啊 类型啊什么的,最好不要完全照书写,这样印象会深刻.)
(另外书上的定义尽量让自己找个方式理解,如果实在理解不上去再背好了...加菲猫的名言是:当你无
法打败你的敌人时,就加入他们!(从内部攻克hoho))
====================
数组:
这个东西和Lisp里面的表特别像,但是没有表那样自由.
数组类型从类型 System.Array 继承而来。
====================
又一个system.
这个system里面都有什么呢?帮助一下...system命名空间
东西好多.....咦 里面有一个Random类 用于生成随机数的 偷偷研究一下^_^
帮助写的真麻烦,百度一个
public static string GetRandomNum()
        {
            Random seed = new Random();
            Random randomNum = new Random(seed.Next());
            return randomNum.Next().ToString();
        }
这个看起来简单些
再看看帮助里面关于next的 恩 还有个NextDouble 成员
尝试改一改看看:
public static double GetRandomNum()
        {
            Random seed = new Random();
            return seed.NextDouble();
        }
这回多简单
每次调用都有不同的随机值了
for (int i = 1; i
=====================
跑题了,回来接着学习数组.
            int[] MyArray = { 1, 2, 3 };
            for (int i = 1; i
回复

使用道具 举报

71

主题

462

帖子

10

银币

中流砥柱

Rank: 25

铜币
748
发表于 2009-6-25 17:05:00 | 显示全部楼层
int[] MyArray = new int[3]{ 1, 2, 3 };
汗 这样就行了 原来里面的3是真正的数组个数.
好 自己尝试写个赋值的代码
for (int j = 0; j
变的数组 要替换的内容 要替换的项
        {
            int[] NewArray = new int[MyArray.Length];
            for (int i = 0; i
哈哈~~O(∩_∩)O自己写的第一个C#函数使用成功
MyArray = ChangeArrayItem(MyArray, 99, 1);
for (int j = 0; j
Array类的成员里面没看到什么实用的)
foreach 函数可以循环这个数组 试一下:
foreach (int j in MyArray)
            {
                Console.WriteLine("{0}", j);
            }
但这个不可以赋值.
---------------------
多维数组:
double[][] pts =new double [3][] { new double [2] { 0, 1 },new double[2] { 2, 3 },new
double[2] { 4, 5 } };
写的好麻烦.
foreach (double[] pt in pts)
            {
                foreach (double n in pt)
                {
                    Console.WriteLine("{0}", n);
                }
            }
可变数组的定义
double[][] pts ;
            pts = new double [3][] ;
            pts[0] =  new double [2] { 0, 1 };
            pts[1] =  new double [3] { 10, 11 ,12};
            pts[2] =  new double [4] { 110, 111 ,112 ,113};
OK 今天下午就先学到这里. 20090625
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-28 19:01 , Processed in 3.094393 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表