使用new操作符创建类的实例
生成form表单
(new Form()).ShowDialog();
结果如图
但是当我们跑以下程序时,结果仍然如上所示,实际上我们创建了两个实例,显示的是第二个实例,如何连续的操纵一个实例呢,我们就引入了引用变量这个概念
(new Form()).Text = "My Form";
(new Form()).ShowDialog();
使用引用变量,我们人为的Form一个变量,然后进行赋值,然后对我们设置的变量进行操作
Form myform;
myform = new Form();
myform.Text = "My Form";
myform.ShowDialog();
类(class)的三大成员
- 属性(Property)存储数据,组合起来表示类或对象当前的状态
- 方法(Method)由函数进化而来,表示类或对象能做什么
- 事件(Event)类或者对象通知其他类或对象的机制,为C#所特有。擅用事件机制
静态成员与实例成员
静态(Static)成员:在语义上表示他是”类的成员“。这个“类”与生俱来的成员。相当于固有属性
实例(非静态)成员:“对象的成员”
绑定(Binding):编译器把一个成员与类或对象绑定起来
构成C#的基本元素
- 关键词(keyword)
- 运算符
- 标识符
- 标点符号
- 文本
- 注释与空白
关键字
表达基本的逻辑词汇
运算符(Operators)
标识符 (Identifier)
命名规则
命名约定
值得注意的是,标识符可以用汉语
在命名时,我们为了保证程序的可读性,必须让一些命名有意义
类型系统
C#的五大数据类型
- 类(Classes)
- 结构体(Structures)
- 枚举(Enumerations)
- 接口(Interfaces)
- 委托(Delegates)
变量
变量的用途是存储数据,变量名表示变量的值在内存中的存储位置,每个变量都有一个类型,决定什么样的值能够存入变量
变量一共有七种:静态变量,实例变量,数组元素,值参数,引用参数,输出参数,局部变量
狭义的变量就是指局部变量,其他种类的变量都有自己约定的名称
静态变量和实例变量
public static int Amount; //static静态成员,隶属于类,不是隶属于类的实例
public int Age; //成员变量(实例变量)隶属于类的实例
public string Name;
数组
int[] array = new int[100];
声明变量
int a;
int a;
int c = a + b ;
变量声明的格式
public static int Amount = 0;
总结一下,变量是以变量名所对应的内存地址为起点,以其数据类型所要求的存储空间为长度的一块内存区域。
方法
方法(method)的前身是c语言中的函数(function),方法是类的最基本的成员之一(最基本的成员只有两个,字段与方法),即函数在称为类的成员时就叫做方法了。方法表示类”能做什么事情“。
方法声明与方法调用
巧用方法,能隐藏复杂的逻辑,把大算法分解为小算法。
调用方法时要与定义方法时的parameter相匹配
命名规范:以动词或者动词短语作为名字(保证可读性),首字母需要大写
using System;
namespace instanceand
{
class Program
{
static void Main(string[] args)
{
Calculator c = new Calculator();
Console.WriteLine(c.GetConeVolume(10, 3));
}
}
class Calculator
{
public double GetcircleArea(double r)
{
return 3.14 * r * r;
}
public double GetCylinderVolume(double r, double h)
{
return GetcircleArea(r) * h; //调用方法时,不用写double,写double时是在声明
}
public double GetConeVolume(double r,double h)
{
return GetCylinderVolume(r,h) / 3;
}
}
}
方法的重载(Overload)
方法签名:由方法的名称,类型形参的个数,每一个形参(从左至右的顺序)的种类,和类型(值,引用或输出)组成。方法签名不包括返回类型。
一下三种Add构成重载
重载决策:在调用时给定参数不同,选择一个最佳函数成员来实施调用
class Calculator
{
public int Add(int a,int b)
{
return a + b;
}
public int Add(int a,int b,int c)
{
return a + b + c;
}
public double Add(double a,double b)
{
return a + b;
}
}
操作符
操作符概览(按照优先级由高到低排序)
操作符来源于数学中的运算符,操作符不能脱离与他相关联的数据类型
优先级
只能用()来提高优先级,带有赋值功能的操作符的运算顺序是从右向左,其他都是从左向右。计算机语言的同优先级运算没有结合律。
x.y(点操作符)
成员访问操作符,可以访问外层名称空间中的子集名称空间,名称空间中的类型,类型中的静态成员,对象的成员。
System.IO.File.Create("D:\\HelloWorld.txt");
访问对象的成员
Form myForm = new Form();
myForm.Text = "Hello World";
myForm.ShowDialog();
f(x):方法调用操作符
在调用方法时,必须要加圆括号,哪怕他没有参数
Console.WriteLine(x);
委托(Action)
上述说过在调用方法时需要加圆括号,但是有一个特例,就是在进行委托时。
委托:在做一件事时不亲自去做,而是交给别人去做。不用直接调用一个方法,通过委托简接调用。
Action myAction = new Action(c.PrintHello);
可以看到后面没加圆括号,我们只是把这个成员委托管理,并不想调用这个方法,之后可以间接调用这个方法。
myAction();
a[]:元素访问操作符
数据类型为整型,有十个数据
int[] myIntArray = new int[10];
数组内容
int[] myIntArray = new int[] {1,2,3,4,5};
方括号中放置的为元素索引,索引不一定为整数
using System;
namespace instanceand
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, Student> stuDic = new Dictionary<string, Student>();
for (int i = 1; i <= 100; i++)
{
Student stu = new Student();
stu.Name = "s_" + i.ToString();
stu.Score = 100 + i;
stuDic.Add(stu.Name, stu);
}
Student number6 = stuDic["s_6"];
Console.WriteLine(number6.Score);
}
}
class Student
{
public string Name;
public int Score;
}
}
x++:后置增增
下述代码的结果为101,100,先让y=x,再让x=x+1
int x = 100;
int y = x++;
Console.WriteLine(x);
Console.WriteLine(y);
typeof
帮助我们查看一个数据的内部结构