Pascal大小写,每个单词的首字母大写,其它小写,用于标识类名、方法名、属性名等,如ProductOrder、Employee和GetEmployeeName等;
Camel大小写,首字母小写,其后每个单词的首字母大写,其它小写,用于标识局部变量、方法的参数名等,如backColor、name等。
从数据存储角度数据可分为值类型和引用类型。值类型主要有三种:简单类型、枚举类型、结构类型。引用类型变量只是对数据的引用,数据保存在其他位置。数组、字符串、类、接口等都属于引用类型。
字符串方法
switch语句一定要有break,break中止当前循环,continue中止本次循环,继续下一次循环
foreach语句用来遍历整个数组;总是从第一个元素遍历到最后一个元素;语句循环变量是个只读变量。
在一个系统中,任何一个对象都应当有两个要素,即属性和行为。“属性”体现了对象自身的状态,“行为”代表对外提供的服务,也表示在进行某种操作时应具备的方法。
对象是类的特例,或者说是类的具体表现形式。
面向对象的最基本的特征是抽象性、封装性、继承性和多态性。
抽象(abstraction)
封装(Encapsulation)
继承(派生):B类对象拥有A类对象的全部属性和方法,这种特性在面向对象中称作对象的继承性。继承机制是系统软件易于扩充。
多态性(Polymorphism) 是指在基类中定义的属性或方法被派生类继承后,可以表现出不同的行为特征,对同一消息会做出不同的响应。
class student
{
private string name; //私有字段:不允许其他类访问
public string Name //设置相应公有属性
{
get{return name;}
set{name = value;}
}
private int age;
public int Age
{get;set;} //自动属性
}
1.设计函数类的方法getFirstRoot()和getSecondRoot()
class Equation
{
private double a ;
public double A
{
get
{
return a;
}
set
{
this.a = value;
}
}
private double b ;
public double B
{
get
{
return b;
}
set
{
this .b =value;
}
}
private double c ;
public double C
{
get
{
return c ;
}
set
{
this.c = value;
}
}
public double GetFirstValue()
{
double x;
x = (-b + Math.Sqrt(b * b - 4 * a * c)) / (2.0 * a);
return x;
}
public double GetSecondValue()
{
double x;
x = (-b - Math.Sqrt(b * b - 4 * a * c)) / (2.0 * a);
return x;
}
}
2.设计一个堆栈类(MyStack),要求: (1)用重载构造方法确定堆栈的大小,其中无参数构造方法构造的堆栈大小为10,有参数构造方法构造的堆栈大小由参数指定; (2)此堆栈只能压入int类型数据; (3)至少实现Push,Pop两个操作; (4)Push,Pop方法都返回一个bool值,用于说明操作是否成功; (5)用一个控制台应用程序测试这个类。
class MyStack
{
private int[] a;
private int length ;
private int tail = -1;
public MyStack() //重载构造方法
{
a = new int[10];
length = 10;
}
public MyStack(int len)
{
a = new int[len];
length = len;
}
public Boolean Push(int x)
{
if (tail + 1 == length)
{
return false;
}
a[++tail] = x;
return true;
}
public Boolean Pop()
{
if(tail < 0)
{
return false;
}
--tail;
return true;
}
}
列表与选择控件
对话框
创建MDI应用程序
将一个窗体设置为主窗体
IsMdiContainer属性设置为true
在主窗体内打开子窗体
FormChild fc = new FormChild();
fc.MdiParent = this;
fc.show();
protected
修饰符
public Dog(string name, int age, string type):base(name, age)
一是派生成员隐藏了基成员
二是重写虚的基成员
virtual
和override
关键字定义类成员
abstract
public abstract class 抽象类名
{
[访问修饰符] abstract 返回值类型 方法名([参数列表]);
}
interface
接口成员
//不能用public修饰接口方法
[访问修饰符] interface IUsb
{
void Charge();
void TransData(string data);
}
public class Mp3:IUsb
{
public int MaxSpeed
{
get{return 480;}
}
public string TransData(string from,string to)
{
return string.Format("数据传输:从{0}到{1}",from,to);
}
}
Mp3 m = new Mp3();
IUsb iu = (IUsb)m;
lblShow.Text = iu.TransData("计算机","Mp3设备");
例:studs.Add(stu);
例:Student stu = (Student)studs[0];
Insert( int index, Object value)
,在插入后,ArrayList会自动调整索引//类Student
public class Student
{
private int no;
private string name;
public Student(int no, string name)
{
this.no = no;
this.name = name;
}
public string ShowMsg()
{
return string.Format("学号:{0},姓名:{1}", no, name);
}
}
ArrayList
//窗体
//存放所有学生
private ArrayList studs = new ArrayList();
public FormArrayList()
{
InitializeComponent();
}
//遍历所有学生的信息,并显示
private void traverse()
{
foreach (Student stu in studs)
{
lblShow.Text += "\n" + stu.ShowMsg();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
int no = Convert.ToInt32(txtNo.Text);
string name = txtName.Text.Trim();
Student stu = new Student(no, name);
studs.Add(stu);
lblShow.Text = "";
traverse();
txtName.Text = "";
txtNo.Text = "";
}
private void btnInsert_Click(object sender, EventArgs e)
{
int no = Convert.ToInt32(txtNo.Text);
string name = txtName.Text.Trim();
int index = Convert.ToInt32(txtIndex.Text);
Student stu = new Student(no, name);
studs.Insert(index, stu);
lblShow.Text = "";
traverse();
txtName.Text = "";
txtNo.Text = "";
txtIndex.Text = "";
}
private void btnForeach_Click(object sender, EventArgs e)
{
lblShow.Text = "";
traverse();
}
private void btnDelete_Click(object sender, EventArgs e)
{
int index;
if (int.TryParse(txtIndex.Text.Trim(), out index))
{
if (index >= 0 && index < studs.Count)
{
studs.RemoveAt(index);
lblShow.Text = "";
txtIndex.Text = "";
traverse();
}
else
{
MessageBox.Show("索引号不在范围内,请重新输入");
txtIndex.SelectAll();
txtIndex.Focus();
}
}
else
{
MessageBox.Show("索引号必须是整数,请重新输入");
txtIndex.SelectAll();
txtIndex.Focus();
}
}
Hashtable:哈希表又称散列表,是表示键/值对的集合
private Hashtable htStuds = new Hashtable();
public FormHash()
{
InitializeComponent();
}
private void traverse()
{
foreach (Object o in htStuds.Values)
{
Student stu = (Student)o;
lblShow.Text += "\n" + stu.ShowMsg();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
int no = Convert.ToInt32(txtNo.Text);
string name = txtName.Text.Trim();
Student stu = new Student(no, name);
htStuds.Add(no, stu);
lblShow.Text = "";
traverse();
txtName.Text = "";
txtNo.Text = "";
}
private void btnDelete_Click(object sender, EventArgs e)
{
int key;
if (int.TryParse(txtKey.Text.Trim(), out key))
{
htStuds.Remove(key);
lblShow.Text = "";
txtKey.Text = "";
traverse();
}
else
{
MessageBox.Show("索引号必须是数字,请重新输入");
}
}
private void btnQuery_Click(object sender, EventArgs e)
{
int key = Convert.ToInt32(txtKey.Text);
Student stu = (Student)htStuds[key];
lblShow.Text = stu.ShowMsg();
}
栈Stack类实现了先进后出的数据结构
队列Queue实现了先进先出的数据结构
try
{
语句块1 //可能引发异常的代码
}
cacth (异常对象) //捕获异常类对象
{
语句块2 //实现异常处理
}
finally
{
语句块3 //无论是否异常,都作最后处理
}
//自定义异常类
class NotEquation:Exception
{
public NotEquation(string str1) : base(str1) {}
// public NotEquation(string str1,Exception e) : base(str1,e) { }
}
try
{
......
if(a==0)
{
throw new NotEquation("这不构成一元二次方程");
}
else if( b * b - 4 * a * c < 0 )
{
throw new NotEquation("此方程无实根");
}
else
{
AEqution aeq = new AEqution(a, b, c);
Console.WriteLine("X1={0}",aeq.getFirstRoot());
Console.WriteLine("X2={0}",aeq.getSecondRoot());
}
}
catch(System.Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine("执行完毕!");
}
public partial class Form : System.Windows.Forms.Form
{
public Form()
{
InitializeComponent();
}
private void btnSort_Click(object sender, EventArgs e)
{
try
{
string[] source = txtSource.Text.Split(',');
int[] a = new int[source.Length];
for (int i = 0; i < source.Length; i++)
{
a[i] = Convert.ToInt32(source[i]);
}
for (int i = 1; i < a.Length; i++)
{
for (int j = i; j <= a.Length - i; j++) //for (int j = 1; j <= a.Length - i; j++)
{
if (a[j - 1] > a[j])
{
int t = a[j - 1]; a[j - 1] = a[j]; a[j] = t;
}
}
}
foreach (int t in a)
{
lblShow.Text += string.Format("{0,-4:D}", t);
}
}
catch(Exception ex)
{
lblShow.Text= ex.Message;
}
}
断点下在循环语句开始前,对i,j,a[]添加监视,逐行执行程序,发现造成不完全排序的原因是 for (int j = i; j <= a.Length - i; j++)语句,j递增的起点随i的递增儿增加,从而不能对前面做完比较造成排序不完全准确。
学习重点
string connString ="Data Source=服务器; Initial Catalog =数据库名; Integrated Security=True";
SqlConnection conn = new SqlConnetion(connStrign);
private void btnLogin_Click(object sender, EventArgs e)
{
string ln = txtLoginName.Text.Trim();
string pwd = txtPassword.Text.Trim();
string connStr = "Data Source = (localdb)\\MSSQLLocalDB;Initial Catalog = BookTestDb; Integrated Security = True";
SqlConnection conn = null;
string sql;
try
{
conn = new SqlConnection(connStr);
sql = string.Format("SELECT COUNT(*) FROM LoginUser WHERE LoginName = '{0}' AND Password = '{1}'", ln, pwd);
conn.Open();
SqlCommand comm = new SqlCommand(sql, conn);
int n = (int)comm.ExecuteScalar();//执行查询语句,返回匹配的行数
if (n > 0)
{
MessageBox.Show("登录成功!", "提示");
FormMain fm = new FormMain();
fm.Show();
this.Hide();
}
else
{
MessageBox.Show("登录不成功,退出!", "提示");
Application.Exit();
}
}
catch(SqlException se)
{
MessageBox.Show(se.Message,"操作数据库出错!",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}
finally
{
conn.Close();
}
}