Modifier trong CSharp: private, protected, internal, protected internal, public Ngày đăng: 11/09/2022

Các access modifiers trong CSharp xác định độ truy cập (Phạm vi) vào dữ liệu của của các trường, phương thức, cấu tử (constructor) hoặc class.

Có 5 kiểu access modifiers trong CSharp:

  1. private
  2. protected
  3. internal
  4. protected internal
  5. public

2- Tổng quan về access modifier

Độ truy cập

(Modifier)

Mô tả

private

Truy cập bị hạn chế trong phạm vi của định nghĩa Class. Đây là loại phạm vi truy cập mặc định nếu không được chính thức chỉ định

protected

Truy cập bị giới hạn trong phạm vi định nghĩa của Class và bất kỳ các class con thừa kế từ class này.

internal

Truy cập bị giới hạn trong phạm vi Assembly của dự án hiện tại.

protected internal

Truy cập bị giới hạn trong phạm vi Assembly hiện tại và trong class định nghĩa hoặc các class con. 

public

Không có bất kỳ giới hạn nào khi truy cập vào các thành viên công khai (public)

Bảng minh họa dưới đây cho bạn cái nhìn tổng quan về cách sử dụng các access modifier.

  Cùng Assembly Khác Assembly
Trong class định nghĩa? Trong class con Ngoài class định nghĩa, ngoài class con Trong class con Ngoài class con
private Y        
protected Y Y   Y  
internal Y Y Y    
protected internal Y Y Y    
public Y Y Y Y Y

3- private access modifier

private access modifier chỉ cho phép truy cập trong nội bộ một class.

Modifier trong CSharp private protected internal protected internal public

Bạn không thể truy cập vào các thành viên private ở bên ngoài class định nghĩa thành viên đó. CSharp sẽ thông báo lỗi tại thời điểm biên dịch class.

Modifier trong CSharp private protected internal protected internal public

4- private constructor

Phương thức khởi tạo (constructor), phương thức (method), trường (field) đều được gọi là các thành viên trong class.

Nếu bạn tạo một class, và có một phương thức khởi tạo (constructor) có access modifier là private, bạn không thể tạo một đối tượng của class này từ private constructor đó từ bên ngoài class này. Hãy xem ví dụ minh họa:

Modifier trong CSharp private protected internal protected internal public

5- protected access modifier

protected access modifier có thể truy cập bên trong package, hoặc bên ngoài package nhưng phải thông qua tính kế thừa.

protected access modifier chỉ áp dụng cho field, method và constructor. Nó không thể áp dụng cho class (class, interface, ..).

Modifier trong CSharp private protected internal protected internal public

 

6- internal access modifier

internal là độ truy cập nội bộ, nó bị giới hạn trong một Assembly.

Một Assembly là chính là sản phẩm đã biên dịch của mã của bạn, thường là một DLL, nhưng EXE cũng có thể coi là một assembly. Nó là đơn vị nhỏ nhất của việc triển khai cho bất kỳ dự án .NET nào.

Assembly một cách cụ thể chứa mã .NET theo MSIL (Microsoft Intermediate language - Một ngôn ngữ trung gian) sẽ được biên dịch thành mã máy tính (Native code) ("JITted" - Được biên dịch bởi các trình biên dịch Just-In-Time) trong lần đầu tiên nó được thực thi trên máy tính,. Đó là mã đã được biên dịch cũng sẽ được lưu trữ trong Assembly và tái sử dụng cho các lần gọi tiếp theo.

7- protected internal access modifier

Độ truy cập protected internal là kết hợp giữa hai độ truy cập protected và internal, khi một thành viên của class có độ truy cập này, bạn chỉ có thể truy cập vào thành viên đó trong cùng class định nghĩa ra nó hoặc các class con và nằm trong cùng một Assembly.

8- public access modifier

public access modifier là mạnh mẽ nhất và có thể truy cập ở mọi nơi. Nó có phạm vi truy cập rộng nhất so với các modifier khác.

Modifier trong CSharp private protected internal protected internal public

9- Độ truy cập và thừa kế

 

Trong CSharp bạn có thể ghi đè (override) một phương thức (method) của class cha bởi một phương thức cùng tên cùng tham số, cùng kiểu trả về tại class con, tuy nhiên bạn không được phép thay đổi độ truy cập (access modifier) của nó.

Modifier trong CSharp private protected internal protected internal public

Tuy nhiên, bạn có thể tạo một phương thức cùng tên cùng tham số, cùng kiểu trả về nhưng khác độ truy cập nếu sử dụng từ khóa new, thực tế đây là một phương thức khác chẳng liên quan gì tới phương thức của class cha.

Modifier trong CSharp private protected internal protected internal public

Nguồn: https://openplanning.net/10439/csharp-access-modifiers

Abstract class trong C# là gì Ngày đăng: 11/09/2022

Abstract class là một trong những khái niệm quan trọng trong lập trình hướng đối tượng. Bài viết này sẽ giới thiệu đến các bạn các vấn đề liên quan đến khái niệm này với những nội dung sau

Đầu tiên các bạn Code thì nên nắm rõ các thuộc tính của C# như Abstract; Interface; Class; Method.

Nói chung là nắm mấy khái niệm này thì sau này sẽ dùng rất nhiều, mà nói chung là mình cũng thuộc loại cốt khá nhiều rồi loạng quạng quên xừ nó khái niệm luôn :)). Căng cò thật sự luôn. Tiện làm bài cho các bạn thì mình cũng có thời gian đọc lại luôn. 

Nói riêng thì mình tổng hợp bài viết từ các trang khác về đây thôi, và xin phép các bạn mình dẫn nguồn đầy đủ nhé

1. Abstract class là gì?

– Abstract class hay còn gọi là lớp trừu tượng. Nếu dùng từ trừu tượng (dịch nghĩa của từ abstract) thì sẽ gây cho bạn khó hiểu, có gì đó mơ hồ khi mới tiếp cận, do đó từ bên dưới mình sẽ gọi lớp trừu tượng là abstract class, phương thức trừu tượng là abstract method. Bạn cứ hiểu nó cũng chỉ là một tên gọi class hay phương thức như bình thường thôi, chủ yếu là bạn hiểu được cách dùng của nó.

– Abstract class được xem như là một lớp cha(base class) cho tất cả các lớp con(derived class) có cùng bản chất (kiểu, loại, nhiệm vụ của lớp).

 Ví dụ: chúng ta có một lớp Animal gồm 2 phương thức:

Eat() { 
// Thức ăn "Động vật ăn cỏ." 
} 
AnimalSound() { 
// Tiếng kêu "Quạ Quạ." 
}

– Và chúng ta có 3 lớp CowCatBird kế thừa từ lớp Animal, tuy nhiên Cow, Cat, Bird thì:

・ Không cùng ăn một loại thức ăn.
・ Và tiếng kêu cũng không giống nhau.

– Do đó mà các phương thức Eat(), AnimalSound() cần phải khác nhau cho từng loại động vật, trong khi chúng cùng được kế thừa từ một lớp duy nhất là Animal.

Nguồn minhhn.com (http://minhhn.com/lap-trinh-c-sharp/lop-truu-tuong-abstract-class-trong-csharp/)

Để hiểu rõ hơn thì thế này

abstract là một từ khóa trong c# thường sử dụng trước các hàm(function) hoặc lớp (class) để thể hiện tính trừu tượng hóa dữ liệu. Nói một cách nôm na và dễ hiểu không trừu tượng thì nó thường dùng để định nghĩa tên hàm hoặc lớp nhưng chưa cần định nghĩa chi tiết hàm hoặc lớp đó. Khi nào chúng ta sử dụng hàm hoặc lớp đó thì chúng ta kế thừa và định nghĩa. Chi tiết hơn thì như sau:

Từ khóa abstract được sử dụng cho các class và method:

  • abstract class: là lớp bị hạn chế, không thể dùng để tạo đối tượng (để truy cập được thì phải kế thừa từ lớp khác).
  • abstract method: chỉ có thể được sử dụng trong một lớp trừu tượng và nó không có phần thân(chưa định nghĩa thân hàm). Phần thân được định nghĩa bởi lớp dẫn xuất (lớp con, kế thừa từ class chứa hàm abstract). Một lớp trừu tượng có thể có cả phương thức trừu tượng và phương thức thông thường
abstract class DongVat { 
  public abstract void keu(); 
  public void sleep() { 
     Console.WriteLine("Zzz"); 
  } 
}

Cách sử dụng sai

DongVat myObj = new DongVat(); // sẽ sinh ra lỗi không tạo được đối tượng

Cách sử dụng đúng

class ConCho: DongVat { public override void keu() { Console.WriteLine("Con cho keu: gau gau"); } }

Nguồn: https://www.pydev.vn/d/29-abstract-trong-c-la-gi

Tổng hợp kiến thức cơ bản về C# Ngày đăng: 10/09/2022

Ngôn ngữ lập trình C# là dựa trên các ngôn ngữ lập trình C và C++, vì thế, nếu bạn đã hiểu cơ bản về C và C++, thì điều này sẽ giúp bạn học tập C# dễ dàng hơn.

Giới thiệu về C#

C# là một ngôn ngữ lập trình đơn giản, hiện đại, mục đích tổng quát, hướng đối tượng được phát triển bởi Microsoft bên trong phần khởi đầu .NET của họ, được phát triển chủ yếu bởi Anders Hejlsberg, một kiến trúc sư phần mềm nổi tiếng với các sản phẩm Turbo Pascal, Delphi, J++, WFC. Loạt bài hướng dẫn này sẽ cung cấp cho bạn kiến thức cơ bản về lập trình C# qua các khái niệm từ cơ bản đến nâng cao liên quan tới ngôn ngữ lập trình C#.

Ngôn ngữ lập trình C# là dựa trên các ngôn ngữ lập trình C và C++, vì thế, nếu bạn đã hiểu cơ bản về C và C++, thì điều này sẽ giúp bạn học tập C# dễ dàng hơn.

C# là gì

C# là một ngôn ngữ lập trình đơn giản, hiện đại, mục đích tổng quát, hướng đối tượng được phát triển bởi Microsoft và được phê chuẩn bởi European Computer Manufacturers Association (ECMA) và International Standards Organization (ISO).

C# được phát triển bởi Anders Hejlsberg và team của ông trong khi phát triển .Net Framework.

C# được thiết kế cho Common Language Infrastructure (CLI), mà gồm Executable Code và Runtime Environment, cho phép chúng ta sử dụng các ngôn ngữ high-level đa dạng trên các nền tảng và cấu trúc máy tính khác nhau.

Dưới đây là các lý do làm C# là ngôn ngữ lập trình chuyên nghiệp được sử dụng rộng rãi:

  • Nó là một ngôn ngữ lập trình hiện đại, mục đích tổng quát.
  • Nó là hướng đối tượng.
  • Nó dễ dàng để học.
  • Nó là một ngôn ngữ được cấu trúc.
  • Nó tạo các chương trình hiệu quả.
  • Nó có thể được biên dịch trên nhiều nền tảng máy tính khác nhau.
  • Nó là một phần của .Net Framework.

Các đặc điểm lập trình mạnh mẽ của C#

Cấu trúc C# khá gần với các ngôn ngữ high-level truyền thống, C và C++, và là một ngôn ngữ lập trình hướng đối tượng. Nó có sự giống nhau mạnh mẽ với Java, nó có nhiều đặc điểm lập trình mạnh mẽ mà làm cho nó trở nên ưa thích với các lập trình viên trên toàn thế giới.

Dưới đây là các đặc điểm quan trọng của C#:

  • Điều kiện Boolean
  • Tự động dọn rác bởi Garbage-Collector (GC)
  • Thư viện chuẩn (Standard Library)
  • Assembly
  • Property và sự kiện (Event)
  • Delegate Quản lý sự kiện
  • Dễ dàng để sử dụng Generic
  • Indexer
  • Biên dịch có điều kiện (Conditional Compilation)
  • Đa luồng dễ dàng (Multithreading)
  • LINQ và Lambda Expression
  • Tích hợp với Windows

Cài đặt môi trường C#

Giới thiệu .Net Framework

.Net Framework là một nền tảng mang tính cách mạng giúp bạn viết các kiểu ứng dụng sau:

  • Windows application
  • Web application
  • Dịch vụ Web

Các ứng dụng .Net Framework là các ứng dụng đa nền tảng. Nền tảng đã được thiết kế theo cách như vậy có thể được sử dụng từ bất kỳ ngôn ngữ lập trình nào: C#, C++, Visual Basic, Jscript, COBOL, …. Tất cả các ngôn ngữ này có thể truy cập tới nền tảng này cũng như giao tiếp với nhau.

.Net Framework gồm một thư viện code khổng lồ được sử dụng bởi các ngôn ngữ client như C#. Dưới đây là một số thành phần của .Net Framework.

  • Common Language Runtime (CLR)
  • .Net Framework Class Library
  • Common Language Specification
  • Common Type System
  • Metadata và Assembly
  • Windows Form
  • ASP.Net và ASP.Net AJAX
  • ADO.Net
  • Windows Workflow Foundation (WF)
  • Windows Presentation Foundation
  • Windows Communication Foundation (WCF)
  • LINQ

Integrated Development Environment (IDE) cho C#

Microsoft cung cấp các công cụ phát triển sau cho lập trình C#:

  • Visual Studio 2010 (VS)
  • Visual C# 2010 Express (VCE)
  • Visual Web Developer

Hai công cụ sau là có sẵn và miễn phí tại Website chính thức của Microsoft. Sử dụng các tool này, bạn có thể viết tất cả các loại chương trình C# từ các ứng dụng dòng lệnh đơn giản tới các ứng dụng phức tạp hơn. Bạn cũng có thể viết các tệp source code của C# bởi sử dụng một Text Editor cơ bản, như Notepad, và biên dịch code đó vào trong Assembly bởi sử dụng Command-line Compiler, mà là một phần của .Net Framework.

Trong loạt bài này, chúng tôi sử dụng Visual C# 2010 Express và bạn có thể tải nó từ: Microsoft Visual Studio. Nó được cài đặt tự động trên máy tính của bạn.

Viết chương trình C# trên Linux hoặc Mac OS

Mặc dù .Net Framework chạy trên Hệ điều hành Windows, nhưng cũng có một số phiên bản thay thế làm việc trên các Hệ điều hành khác. Mono là một phiên bản mã nguồn mở của .Net Framework mà gồm một C# compiler và chạy trên một số Hệ điều hành, gồm Linux và Mac OS. Bạn có thể truy cập: Go Mono.

Mục đích của Mono không chỉ để chạy trên các ứng dụng .Net trên Microsoft, mà còn đem lại công cụ phát triển cho các lập trình viên Linux. Mono có thể chạy trên nhiều Hệ điều hành khác nhau, như Android, BSD, iOS, Linux, OS X, Windows, Solaris, và UNIX.

Cấu trúc chương trình C#

Trước khi học về cách xây dựng các khối của ngôn ngữ lập trình C#, chúng ta nên tìm hiểu cấu trúc cơ bản chương trình C#.

Tạo chương trình Hello World trong C#

Một chương trình C# gồm các phần sau:

  • Khai báo Namespace
  • Một class
  • Phương thức của lớp
  • Thuộc tính của lớp
  • Một phương thức Main
  • Lệnh và biểu thức
  • Comment

Bạn theo dõi đoạn code đơn giản sau sẽ in "Hello World":

using System; namespace VietJackCsharp { class TestCsharp { static void Main(string[] args) { /* chuong trinh in dong chu Hello World trong C# */ Console.WriteLine("Hello World"); Console.ReadKey(); } } }

Nhấn phím F5 để biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

Tổng hợp kiến thức cơ bản về C

Giờ chúng ta xem xét các phần của chương trình trên:

  • Dòng đầu tiên using System;. Từ khóa using được sử dụng để bao System namespace trong chương trình. Nói chung, một chương trình có nhiều lệnh using.
  • Dòng tiếp theo có khai báo namespace. Một namespace là một tập hợp các lớp. HelloWorldApplication namespace chứa class HelloWorld.
  • Dòng tiếp theo có một khai báo class, class HelloWorld chứa các định nghĩa dữ liệu và phương thức mà chương trình của bạn sử dụng. Nói chung, class chứa nhiều phương thức. Các phương thức định nghĩa hành vi của class. Tuy nhiên, lớp HelloWorld chỉ có một phương thức Main.
  • Dòng tiếp theo định nghĩa phương thức Main, mà là entry point cho tất cả chương trình C#. Phương thức Main biểu diễn trạng thái lớp khi được thực thi.
  • Dòng tiếp theo /*…*/ bị bỏ qua bởi compiler và nó là comment cho chương trình.
  • Phương thức Main xác định hành vi của nó với lệnh Console.WriteLine("Hello World");
  • WriteLine là một phương thức của lớp Console được định nghĩa trong System namespace. Lệnh này làm thông báo "Hello, World!" được hiển thị trên màn hình.
  • Dòng cuối cùng Console.ReadKey(); là cho VS.NET Users. Nó làm chương trình đợi cho một phím được nhấn và nó ngăn cản màn hình chạy và đóng một cách nhanh chóng khi chương trình được phát động từ Visual Studio.Net.

Bạn nên ghi nhớ các điểm sau:

  • C# là phân biệt kiểu chữ (case sensitive).
  • Tất cả lệnh và biểu thức phải kết thúc với một dấu chấm phảy (;).
  • Sự thực thi chương trình bắt đầu tại phương thức Main.
  • Không giống Java, tên file chương trình có thể khác tên lớp.

Biên dịch và thực thi chương trình C#

Nếu bạn đang sử dụng Visual Studio.Net để biên dịch và thực thi các chương trình C#, bạn theo các bước sau:

Bắt đầu Visual Studio.

Trên thanh menu, chọn File -> New -> Project.

Chọn Visual C# từ các Template, và sau đó chọn Windows.

Chọn Console Application.

Xác định tên cho project và nhấn nút OK.

Điều này tạo New Project trong Solution Explorer.

Viết code trong Code Editor.

Nhấn nút Run hoặc nhấn phím F5 để thực thi project. Một cửa sổ Command Prompt xuất hiện mà chứa dòng Hello World.

Bạn có thể biên dịch một chương trình C# bởi sử dụng command-line thay cho Visual Studio IDE:

Mở một Text Editor và thêm code trên vào.

Lưu tệp dưới dạng helloworld.cs

Mở công cụ Command Prompt tool và tới thư mục nơi bạn lưu file đó.

Soạn csc helloworld.cs và nhấn Enter để biên dịch code của bạn.

Nếu không có lỗi nào trong code, thì Command prompt đưa bạn tới dòng tiếp theo và tạo tệp helloworld.exe có thể thực thi (executable).

Soạn helloworld để thực thi chương trình của bạn.

Bạn có thể thấy output là Hello World được in trên màn hình.