2.C#基本语法和变量

/*
 C#基本语法:
    代码的外观和操作方式和C++与java非常类似,但实际上C#编程中使用的样式是比较清晰的,不用花太多力气可以
    编写出便于阅读的代码

    与其他语言编译器不同,C#编译器不考虑代码中的空格,回车符或制表符,这样代码就有很大自由度,但遵循某些规则有利于阅读代码

    C#代码由一系列语句组成,每个语句都用一个分好来结束,因为忽略空白,所以一行可以有多个语句,但从可读行来看
    通常语句分开并且巨涌一定格式是更好的

    C#是一种块结构语言,所有语句都代码块的一部分,使用{}界定,代码块中可以包含任意多行的语句或不包含语句
    注意{}字符不需要附带分号,所以简单的代码就可以如下格式
    {
    <code line 1, statement 1>;
    <code line 2, statement 2>
      <code line 3, statement 2>;
    }
    其中 <code line x, statement y>部分并非真正代码,只是表示一种格式无实际含义,在这段代码中
    2,3行是同一个语句,因为第二行没有分号,
    一般缩进为一个单位为4的制表符

    注释:
        有两种方式,可以在注释的开头和结尾放置标记
        //单行注释
        /*
         多行注释
         *\/ 这里转义了一下
     注意C#是区分大小写的 
        
 */

//C#控制台应用程序的基本结构

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program1
    {
        static void Main1(string[] args)
        {
            //output text to the cmd windows
            Console.WriteLine("the first aoo in beginning C# programing!");
            Console.ReadKey();
        }
    }
}
//从上面可以看出分号{}注释缩进都有的
//在运行控制台应用程序时就会运行这段代码,更确切的说是运行{}中的代码块
//这里注意一下代码突出显示功能,对于Windows应用程序来说比较重要,因为是一个比较重要的特性
//要实现该功能需要使用#region和#endregion关键字来定义可以展开和折叠代码区域开头和结尾
/*
所以以上代码可以改成
#region Using directives
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            //output text to the cmd windows
            Console.WriteLine("the first aoo in beginning C# programing!");
            Console.ReadKey();
        }
    }
}
#endregion
这样就可以把这些代码折叠为一行以后要查看可以再次展开它,using和namespace后面解释
以#开头的任意关键字实际上都是一个预处理指令
*/


//变量
/*
 变量关系到数据的存储,实际上可以把计算机内存中的变量看作架子上的盒子,在这些盒子中可以放入一些东西
 在把它们取出来,或者只是看看盒子里面是否有东西,变量也是这样,数据可以放在变量中,也可以从变量中取出来查看

尽管在计算机中所有数据事实上都是相同的东西一组0和1,但变量有不同的内涵,叫做类型,盒子有不同尺寸
某些东西只能放在特定的盒子中,建立这个类型系统的原因是不同类型的数据需要用不同方法进行处理,变量限定为不同类型
可以避免混淆,例如组成图片的0和1与组成声音的0和1其处理方式是不同的
要使用变量,需要声明它们,即给变量指定名称和类型,声明变量后,就可以使用他们用作存储单元,存储所声明的数据类型的数据
声明变量的C#语法是指定类型和变量名
<type> <name>;
如果使用没有声明的变量,代码将无法编译,但此时编译器会告诉我们出现了什么问题,可以使用的变量类型是无限多的
因为你可以自定义类型,存储各种复杂数据,但是总有一些是通用的
简单类型
   就是组成应用程序中基本构件的类型例如数值和布尔值
   简单类型和复杂类型不同,没有子类型或特性,大多数简单类型都是储存数值的
   数值类型过多的原因是在计算机内存把数字作为一系列的0和1来存储的机制对于整数值用一定的位来存储
   用二进制表示,以N位来存储的变量可以表示任何介于0到2的N-1次方之间的数,大于这个值数,将不能存储这个变量中
   例如
   0 = 00
   1 = 01
   2 = 10
   3 = 11
   如果要储存更多的数字就需要更多的位,所以需要比较多数值类型来避免不足或浪费
   sbyte----System.SByte    在-128到127之间的整数
   byte-----System.Byte     在0到255之间的整数
   short----SystemInit16    在-32768到32767之间的整数
   ushort----System.UInit16 在0到65535之间的整数
   int----System.Init32     在-2147483648到2147483647之间的整数
   uint----System.UInit32   在0到4294967295之间的整数
   long----System.Int64     在-9223372036854775808到9223372036854775807之间的整数
   ulong----System.UInt64   在0到18446744073709551615之间的整数
   
    一些变量名称前面的u表示无符号unsigned的缩写

    浮点型:
    float--------SystemSingle  +/- m * 2 ^e  m:0-2^24 e:-149----104
    double-------SystemDouble  +/- m * 2 ^e  m:0-2^53 e:-1075---970
    decimal------SystemDecimal +/- m * 10 ^e m:0-2^96 e:-26-----0

    除了数值类型外还有其他三种简单类型
    char System.Char 一个Unicode字符存储0-65535之间的整数
    bool System.Boolean 布尔值true/false
    string System.String 一组字符
    注意string的字符数没有上限,因为他可以使用可变大小的内存
*/

//变量实例
//声明两个变量 int myInteger; string myString;
//给这两个变量赋值 myInteger = 17;  myString = "\"myInteger\" is ";
//将变量的值输出到控制台上  Console.WriteLine("{0} {1}", myString, myInteger);
//需要注意的是转义符的使用,还有变量占位符使用
#region Using directives
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ConsoleApplication2
{
    class Program2
    {
        static void Main2(string[] args)
        {
            int myInteger;
            string myString;
            myInteger = 17;
            myString = "\"myInteger\" is ";
            Console.WriteLine("{0} {1}.", myString, myInteger);
            Console.ReadKey();
        }
    }
}
#endregion

//不能把任意序列的字符作为变量名
//变量名的规则:变量名的第一个字符必须是字母,下划线或@,气候的字符可以是字母数字下划线
//正确变量名:mybigvar,VAR1,_test
//错误变量名:99sss,namespace,It's-All-Over
/*变量名命名约定:
 变量类型+名字,例如iAge表示int类型
 camecase命名约定
 nameCase
 firstName
 timeOfDeath
 另外一种PascalCase
 NameCase
 FirstName
 WinterOfDiscontent
 在Microsoft中建议简单变量使用cameCase,高级的使用PascalCase
*/


/*
 字面值,数值和字符型都是字面值的
 这里只说一下以下的请况
 eddy\'s string
 eddy\u0027s string
 Unincode转义序列
 也可以逐字的指定字符串
 "Verbatim string literal"
 @ "Verbatim string literal"

"C:\\temp\\Mydir\\Myfile.doc"
@"C:\\temp\\Mydir\\Myfile.doc"

这样就不会在字符串里面存在大量的反斜杠

变量赋值和声明
int = age;
age = 25;

声明多个类型相同的变量
int xsize,ysize;
也可以像上面一样声明的同时进行赋值

int xsize = 4,ysize = 5;
int xsize,ysize = 5;这里需要注意xsize依然需要初始化也就是赋值,ysize不需要了

表达式
    把变量和字面值与运算符组合起来,就可以创建表达式,它是计算的基本构件
    运算符范围广泛
        一元运算符,处理一个操作数
        二元运算符,处理二个操作数
        三元运算符,处理三个操作数

        大多数都是二元运算符,只有几个一元运算符和三元运算符,即条件运算符

       数学运算符:
            +   二元  a = b + c   求和
            -   二元  a = b - c   求减
            *   二元  a = b * c   求乘
            /   二元  a = b / c   求商
            %   二元  a = b % c   求余
            +   一元  a = +b      a的值等于b的值
            -   一元  a = -b      a的值等于b的值乘以-1

           在b和c是字符串的时候二元+依然有效表示两个字符串首尾相连的字符串
           其他的数学运算符不能用于处理字符串

            还有比较特殊的数学运算符
            ++  一元  a = ++b     a = b + 1 a的值是b+1 b的值递增1
            --  一元  a = --b     a = b - 1 a的值是b-1 b的值递减1
            ++  一元  a = b++     a = b + 1 a的值是b   b的值递增1
            --  一元  a = b--     a = b - 1 a的值是b   b的值递减1
            
            ++:总是使操作数加1
            --:总是使操作数减1
*/

//++,--例子
#region Using directives
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ConsoleApplication3
{
    class Program3
    {
        static void Main3(string[] args)
        {
            int var1, var2 = 5, var3 = 6 ;
            var1 = var2++ * --var3;         
            Console.WriteLine(var1);
            Console.ReadKey();
        }
    }
}
#endregion
//计算结果:--在前的时候需要优先考虑即var3=5,++在var2后面在计算结果之后var2才会进行++
//所以结果:var1 = 5 * 5 var1=25
//计算完毕之后var2=6 var3=5
#region Using directives
namespace ConsoleApplication4
{
    class Program4
    {
        static void Main4(string[] args)
        {
            double firstNumber, secondNumber;
            string userName;
            Console.WriteLine("Enter your name:");
            userName = Console.ReadLine();
            Console.WriteLine("Welcome {0}", userName);
            Console.WriteLine("Now give me a number:");
            firstNumber = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Now give me another number:");
            secondNumber = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("the sum of {0} and {1} is {2}", firstNumber, secondNumber, firstNumber + secondNumber);
            Console.WriteLine("the result of subtracting {0} form {1} is {2}", firstNumber, secondNumber, firstNumber - secondNumber);
            Console.WriteLine("the product of {0} and {1} is {2}", firstNumber, secondNumber, firstNumber * secondNumber);
            Console.WriteLine("the dividing of {0} by {1} is {2}", firstNumber, secondNumber, firstNumber / secondNumber);
            Console.WriteLine("the remainder after dividing {0} by {1} is {2}", firstNumber, secondNumber, firstNumber % secondNumber);
            Console.ReadLine();

        }
    }
}
#endregion
//以上除了数学运算符之外还有两个重要的概念
//用户输入和类型转换


/*
赋值运算符
    =    二元  a = b    a被赋予b的值
    +=   二元  a += b   a被赋予a+b的值
    -=   二元  a -= b   a被赋予a-b的值
    *=   二元  a *= b   a被赋予a*b的值
    /=   二元  a /= b   a被赋予a/b的值
    %=   二元  a %= b   a被赋予a/b的余数的值

运算优先级
    a = b + c
    a = b + c * d 
    a = (b + c) * d 
    都是标准的数学运算顺序

    优先级高到低:
        ++,--,+和-的一元
        *,/,%
        +,-
        =,*=,-=,%=,/=
        ++,--
        
名称空间
    它们是.NET中提供应用程序代码容器的方式,这样就可以唯一的标识代码及其内容
    名称空间也用作.NET Framework中给项分类的一种方式,大多数都是类型定义,默认
    情况下C#代码包含在全局名称空间中,这意味着对于包含在这段代码中的项,只要按照
    名称进行引用就可以由全局名称空间中的其他代码访问他们,可以使用namespace关键字
    为花括号中的代码块显示定义名称空间,如果在该名称空间代码的外部使用名称空间中的名称
    就必须写出该名称空间中的限定名称。
    限定名称包含它所有的分层信息,这基本意味着如果一个名称空间中的代码需要使用在另外一个名称空间中
    定义的名称就必须包括对该名称空间的引用,限定名称在不同的命名空间级别之间使用句点
    另外名称空间可以进行嵌套

    namespace levelone
    {
        using LT = leveltwo;
        namespce leveltwo
        {
            //name namethree defined
        }
    }
    levelone名称空间中的代码可以把levelone.namethree引用为namethree,levelone.leveltwo.namethree.namethree引用LT.namethree


 */
#region Using directives
namespace first_space
{
    class namespace_cl
    {
        public void func()
        {
            Console.WriteLine("Inside first_space");
        }
    }
}
namespace second_space
{
    class namespace_cl
    {
        public void func()
        {
            Console.WriteLine("Inside second_space");
        }
    }
}
class TestClass
{
    static void Main(string[] args)
    {
        first_space.namespace_cl fc = new first_space.namespace_cl();
        second_space.namespace_cl sc = new second_space.namespace_cl();
        fc.func();
        sc.func();
        Console.ReadKey();
    }
}
#endregion


//using space
using System;
using first_space;
using second_space;

namespace first_space
{
    class abc
    {
        public void func()
        {
            Console.WriteLine("Inside first_space");
        }
    }
}
namespace second_space
{
    class efg
    {
        public void func()
        {
            Console.WriteLine("Inside second_space");
        }
    }
}
class TestClass
{
    static void Main(string[] args)
    {
        abc fc = new abc();
        efg sc = new efg();
        fc.func();
        sc.func();
        Console.ReadKey();
    }
}

//嵌套namespace
using System;
using SomeNameSpace;
using SomeNameSpace.Nested;

namespace SomeNameSpace
{
    public class MyClass
    {
        static void Main()
        {
            Console.WriteLine("In SomeNameSpace");
            Nested.NestedNameSpaceClass.SayHello();
        }
    }

    // 内嵌命名空间
    namespace Nested
    {
        public class NestedNameSpaceClass
        {
            public static void SayHello()
            {
                Console.WriteLine("In Nested");
            }
        }
    }
}

 

转载于:https://my.oschina.net/eddylinux/blog/1484047

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值