lập trình visual studio .net

31
www.themegallery.c om LOGO Lập trình Visual Studio .NET GV: Phan Bá Trí Email: [email protected] Huế, 2/2012

Upload: stephanie-snider

Post on 03-Jan-2016

86 views

Category:

Documents


0 download

DESCRIPTION

Lập trình Visual Studio .NET. GV: Phan Bá Trí Email: [email protected]. Huế, 2/2012. Chương 3: Lập trình HĐT với C#. Nội dung: 1. Giới thiệu: - Hàm dựng - Hàm hủy - Trường - Hằng - Phương thức 2. Giới thiệu - Hàm nạp chồng - Hàm ghi đè - Hàm ảo - Lớp trừu tượng - Lớp Sealed. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Lập trình Visual Studio .NET

www.themegallery.com

LOGO

Lập trình Visual Studio .NETLập trình Visual Studio .NET

GV: Phan Bá Trí

Email: [email protected]

Huế, 2/2012

Page 2: Lập trình Visual Studio .NET

Chương 3: Lập trình HĐT với C#

Nội dung:1. Giới thiệu:- Hàm dựng- Hàm hủy- Trường- Hằng- Phương thức

2. Giới thiệu- Hàm nạp chồng- Hàm ghi đè- Hàm ảo- Lớp trừu tượng- Lớp Sealed

Page 3: Lập trình Visual Studio .NET

Chương 3: Lập trình HĐT với C#

3. Thuộc tính- Các loại thuộc tính- Thuộc tính và trường- Thuộc tính và phương thức- Thuộc tính tĩnh

4. Chỉ mục- Giới thiệu- Khai báo- Chỉ mục và thuộc tính- Chỉ mục và mảng- Chỉ mục nhiều tham số

Page 4: Lập trình Visual Studio .NET

Chương 3: Lập trình HĐT với C#

5. Sự kiện- Sự kiện là gì- Sự kiện và con trỏ hàm- Khai báo sự kiện- Ví dụ

Page 5: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

- Hàm dựng- Hàm hủy- Trường- Phương thức

Page 6: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

Mức truy cập của biếnMức truy

cậpMô tả

public Biến hoặc phương thức có thể được truy xuất từ bất cứ nơi nào.

internalBiến hoặc phương thức chỉ có thể truy xuất trong phạm vi cùng assembly.

protectedBiến hoặc phương thức chỉ có thể truy xuất từ bên trong kiểu dữ liệu mà nó thuộc về, hoặc các kiểu dữ liệu dẫn xuất.

protectedinternal

Biến hoặc phương thức có thể được truy xuất trong phạm vi assembly hiện tại, hoặc từ các kiểu dữ liệu dẫn xuất từ kiểu dữ liệu chứa nó.

privateBiến hoặc phương thức chỉ có thể được truy xuất từ bên trong kiểu dữ liệu mà nó thuộc về.

Page 7: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

a. Hàm dựng (Constructors)- Là một loại đặc biệt của phương thức trong một lớp- Được gọi khi một lớp được tạo- Thường được sử dụng để khởi tạo các giá trị trong một lớp- Tên trùng với tên lớp- Không trả về giá trị- Nếu không tạo ra hàm dựng C# sẽ tạo ra hàm dựng ngầm định- Một lớp có thể có nhiều hàm dựng nhưng khác nhau về số lượng hoặc kiểu của tham số

Page 8: Lập trình Visual Studio .NET

Ví dụ:

using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.IO;

namespace ArrayList_Bt1

{

static class Program

{

[STAThread]

static void Main()

{

Person p1 = new Person("Nguyen Hoang Ha");

p1.SayName();

Person p2 = new Person("Hoang Ha","112 Thien Thai ");

p2.SayName();

}

Page 9: Lập trình Visual Studio .NET

Ví dụ:

public class Person { string HoTen, DiaChi = "Nguyen Hue"; public Person(string HoTen) { this.HoTen = HoTen; } public Person(string HoTen, string DiaChi) { this.HoTen = HoTen; this.DiaChi = DiaChi; } public void SayName() { Console.WriteLine("Ho ten: {0}, dia chi: {1}", HoTen, DiaChi); } } }}

Page 10: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

a.1 Private Constructors- Được sử dụng khi một lớp chỉ có các thành viên tĩnh và lớp không cần phải tạo ra.

Page 11: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

Ví dụ:using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.IO;

namespace ArrayList_Bt1

{

static class Program

{

[STAThread]

static void Main()

{

Console.WriteLine(MatConsants.pi);

}

Page 12: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

class MatConsants

{

public static double pi = 3.14;

private MatConsants()

{

}

}

}

}

Page 13: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

a.2 Static Constructors- Được gọi tự động (chỉ một lần) trước khi thực thể đầu tiên của đối tượng được tạo hoặc các thành viên tĩnh được tham chiếu.- Không có tham số

Page 14: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

b Hàm hủy (Destructor)- Destructor trong C# được gọi là bộ thu gom rác Garbage Collectors.- Bộ thu gom rác sẽ giải phóng bộ nhớ khi đối tượng không còn yêu cầu hoặc tham chiếu.- Destructor khai báo như sau:

~ <tên hàm hủy>(){

// Câu lệnh;}

Page 15: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

c. Trường (Fileds)- Lưu trữ giá trị- Cú pháp: <mức truy cập> <kiểu> <tên trường>- Mức truy cập: public, private, protected, internal, protected internal- Kiểu:

+ Kiểu giá trị được định nghĩa sẵn(int, char,…)

+ Kiểu tham chiếu: lớp, struct, mảng, chuỗi,…

Page 16: Lập trình Visual Studio .NET

Ví dụ:

using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.IO;

 

namespace ArrayList_Bt1

{

static class Program

{

[STAThread]

static void Main()

{

SinhVien sv = new SinhVien();

sv.HoTen = "Nguyen Van Trung";

sv.DsDiem[0] = 5;

DateTime.Parse("03/02/2012");

Console.WriteLine(sv.HoTen);

Console.WriteLine(sv.DsDiem[0]);

sv.HienThi();

}

public class SinhVien

{

public string HoTen;

internal bool GioiTinh;

protected DateTime NgaySinh;

internal float[] DsDiem = new float[100];

public void HienThi()

{

SinhVien sv1 = new SinhVien();

sv1.NgaySinh =DateTime.Parse("3/3/99");

Console.WriteLine(sv1.NgaySinh);

}

}

}

}

Page 17: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

Trường tĩnh- Được khai báo trong một lớp- Khi sử dụng không cần phải tạo ra lớp chứa trường tĩnh- Khi khai báo chỉ cần dùng static trước tên biến- Truy xuất: <Tên lớp>.tên trường tĩnh

Page 18: Lập trình Visual Studio .NET

Ví dụ trường tĩnh

using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.IO;

namespace ArrayList_Bt1

{

static class Program

{

class Test

{

[STAThread]

static void Main()

{

Console.WriteLine(List.Dem);

List lt1 = new List();

Console.WriteLine(List.Dem);

List lt2 = new List();

Console.WriteLine(List.Dem);

}

}

public class List

{

public static int Dem = 0;

public List()// Hàm dựng được gọi khi khởi tạo

{

Dem ++;

}

}

}

}

Page 19: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

d. Hằng (Constants)- Khai báo hàm dùng bổ từ const- Không thể thay đổi giá trị của hằng- Hằng sử dụng như trường tĩnh

Page 20: Lập trình Visual Studio .NET

Ví dụ về hằng

using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.IO;

 

namespace ArrayList_Bt1

{

static class Program

{

class Test

{

[STAThread]

static void Main()

{

Console.WriteLine("Male {0}",Gender.male);

Console.WriteLine("Female {0}", Gender.female);

}

}

public class Gender

{

public const int male = 1;

public const int female = 0;

}

}

}

Page 21: Lập trình Visual Studio .NET

3.1 Lớp đối tượng

e. Phương thức (Method)- Là nơi tập hợp các câu lệnh- Được khai báo trong lớp hoặc cấu trúc, phải chỉ rõ mức truy cập, tên, kiểu trả về, danh sách các tham số. Nếu không có tham số phải có dấu ngoặc đơn ()- Phương thức không trả về giá trị có kiểu khai báo là void- Dùng return trong trường hợp phương thức có giá trị trả về

Page 22: Lập trình Visual Studio .NET

Ví dụ về phương thức

using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.IO;

namespace ArrayList_Bt1

{

static class Program

{

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Human hm = new Human("Nguyen Thom");

hm.SayName();

}

public class Human

{

public void SayName()

{

Console.WriteLine("My name is {0}", name);

}

string name;

public Human(string name)

{

this.name = name;

}

}

}

}

Page 23: Lập trình Visual Studio .NET

3.2 Hàm

Giới thiệu về kế thừa:- C# chỉ hỗ trợ đơn kế thừa, tức là một lớp chỉ có thể kế thừa nhiều nhất là từ một lớp cha- Lớp cơ sở nhất trong C# là lớp System.Object- Cú pháp khai báo:

class LopCon:LopCha{

Cài đặt lớp con}

Page 24: Lập trình Visual Studio .NET

Ví dụ về kế thừa

using System;

using System.Collections.Generic;

using System.Windows.Forms;

namespace KeThua

{

static class Program

{

class Test

{

[STAThread]

static void Main()

{

Person p1 = new Person("Harry Potter");

p1.SayName();

Employee p2 = new Employee ("Nguyen Hoang Hue");

p2.SayName();

}

}

public class Person

{

protected string Name;

public Person(string Name)

{

this.Name = Name;

}

public void SayName()

{

Console.WriteLine("Person has Name is {0}", Name);

}

}

public class Employee : Person

{

public Employee(string Name)

: base(Name)

{ }

}

}

}

Page 25: Lập trình Visual Studio .NET

3.2 Hàm

- Person là lớp cơ sở (Lớp cha)- Employee là lớp dẫn xuất (lớp con) từ lớp Person, vì thế:

+ Nó kế thừa tất cả các dữ liệu và hàm thành viên của lớp cha (trừ private)

+ Constructors không tự động kế thừa lên lớp cha, do đó người sử dụng phải chỉ rõ:public Employee (string Name): base (Name) {}

Lưu ý: Có thể sử dụng ClassDiagram.cd để thiết kế cho 2 lớp trên

Page 26: Lập trình Visual Studio .NET

Ví dụ về kế thừa

using System;

using System.Collections.Generic;

using System.Windows.Forms;

namespace KeThua

{

static class Program

{

class Test

{

[STAThread]

static void Main()

{

Employee e = new Employee ();

e.SayName();

}

}

public class Person

{

protected string Name=“NguyenHoangHa”;

public viturual void SayName()

{

Console.WriteLine("Person has Name {0}", Name);

}

}

public class Employee : Person

{

double Salary=3500000;

public override void SayName()

{ base.SayName();

Console.WriteLine("Salary is {0}", Salary);

}

}

Page 27: Lập trình Visual Studio .NET

3.2 Hàm

a. Hàm nạp chồng (Overloading) - Hàm nạp chồng là hàm trùng tên trong một lớp nhưng khác nhau về số lượng và kiểu của các tham số.- Không nạp chồng dựa vào tên tham số và kiểu trả về của các tham số

Page 28: Lập trình Visual Studio .NET

Ví dụ về nạp chồng

using System;

using System.Collections.Generic;

using System.Windows.Forms;

namespace Overload

{

static class Program

{

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

TinhDienTich tdt = new TinhDienTich();

Console.WriteLine("Dien tich hinh tron {0}", tdt.DT(3));

Console.WriteLine("Dien tich hinh chu nhat {0}", tdt.DT(3, 4));

Console.WriteLine("Dien tich tam giac {0}", tdt.DT(3, 4, 5));

}

class TinhDienTich

{

public double DT(double r)

{

return Math.PI*r*r;

}

public double DT(double a, double b)

{

return a * b;

}

public double DT(double a, double b, double c)

{

double p = (a + b + c) / 2;

return Math.Sqrt(p*(p - a)*(p - b) * (p - c));

}

}

}

}

Page 29: Lập trình Visual Studio .NET

3.2 Hàm

b. Hàm ghi đè (Overriding) - Hàm ghi đè là hàm giống nhau trên cả lớp cha và lớp con- Để ghi đè một hàm đã có trên lớp cha:

+ Khai báo một hàm mới trong lớp con với tên giống với lớp cha

+ Sử dụng từ new

Page 30: Lập trình Visual Studio .NET

Ví dụ về ghi đè

using System;

using System.Collections.Generic;

using System.Windows.Forms;

namespace GhiDe

{

static class Program

{

class Test

{

[STAThread]

static void Main()

{

Employee e = new Employee (“Bill Gate”);

e.SayName();

}

}

public class Person

{

protected string Name;

public Person(string Name)

{

this.Name = Name;

}

public void SayName()

{

Console.WriteLine(“My name is {0}", Name);

}

}

public class Employee : Person

{

public Employee(string Name):base (Name) {}

public new void SayName()

{ base.SayName();

Console.WriteLine(“Empoyee name is {0}", Name);

}

}

Page 31: Lập trình Visual Studio .NET

That’s all