VB có thực sự phân biệt chữ hoa chữ thường không?


122

Tôi không cố gắng bắt đầu tranh luận ở đây, nhưng vì bất cứ lý do gì, nó thường được tuyên bố rằng Visual Basic không phân biệt chữ hoa chữ thường và ngôn ngữ C thì không (và bằng cách nào đó đó là một điều tốt).

Nhưng đây là câu hỏi của tôi: Chính xác thì Visual Basic không phân biệt chữ hoa chữ thường ở đâu? Khi tôi gõ ...

Dim ss As String
Dim SS As String

... vào Visual Studio 2008 hoặc Visual Studio 2010 IDE, cái thứ hai có cảnh báo " Biến cục bộ SSđã được khai báo trong khối hiện tại ". Trong VBA VBE, nó không tạo ra lỗi ngay lập tức, mà chỉ tự động sửa trường hợp.

Tôi có thiếu điều gì đó ở đây với đối số này rằng Visual Basic không phân biệt chữ hoa chữ thường không? (Ngoài ra, nếu bạn biết hoặc muốn trả lời, tại sao đó lại là một điều tồi tệ?)

Tại sao tôi lại hỏi câu hỏi này?

Tôi đã sử dụng Visual Basic trong nhiều phương ngữ của nó trong nhiều năm nay, đôi khi với tư cách là một người yêu thích, đôi khi cho các chương trình liên quan đến doanh nghiệp nhỏ trong một nhóm làm việc. Trong sáu tháng qua, tôi đang thực hiện một dự án lớn, lớn hơn nhiều so với dự đoán của tôi. Phần lớn mã nguồn mẫu có trong C #. Tôi không có bất kỳ mong muốn cháy bỏng nào để học C #, nhưng nếu có những điều tôi đang bỏ lỡ mà C # cung cấp mà Visual Basic thì không (ngược lại sẽ là VB.NET cung cấp XML Literals ), thì tôi muốn để biết thêm về tính năng đó. Vì vậy, trong trường hợp này, người ta thường tranh luận rằng ngôn ngữ C phân biệt chữ hoa chữ thường và điều đó là tốt và Visual Basic không phân biệt chữ hoa chữ thường và điều đó thật tệ. Tôi muốn biết ...

  1. Visual Basic không phân biệt chữ hoa chữ thường chính xác như thế nào vì mọi ví dụ đơn lẻ trong trình soạn thảo mã đều trở nên phân biệt chữ hoa chữ thường (nghĩa là trường hợp được sửa chữa) cho dù tôi có muốn hay không.
  2. Điều này có đủ thuyết phục để tôi xem xét chuyển sang C # nếu trường hợp VB.NET bằng cách nào đó hạn chế những gì tôi có thể làm với mã không?

5
+1 Tôi đã tự hỏi về chính xác điều này trước đây.
NakedBrunch vào

7
Ummm ... không chắc chắn rằng bạn hiểu những gì đựng pin- trong phương tiện nhạy cảm. Bởi vì VB trên thực tế không phân biệt chữ hoa chữ thường, SS và ss cùng một tên, trong khi trong C thì không.
Ed S.

1
@ed: Tôi không thể sử dụng cả hai SSsstrong VB, cái nào tôi sử dụng trước là cái mà trình soạn thảo sử dụng.
Todd Main

1
Otaku, tôi chắc chắn khuyên bạn nên giữ câu hỏi này tập trung vào chính xác ý nghĩa của việc nói VB không phân biệt chữ hoa chữ thường và cách nó được triển khai. Câu hỏi liệu có nên tốt hơn cho một ngôn ngữ không phân biệt chữ hoa chữ thường, có thể bắt đầu một cuộc chiến nảy lửa hay không. Nếu bạn thực sự tò mò, hãy hỏi nó trong một câu hỏi khác. (Tôi khuyên bạn không nên, nhưng nếu sau đó bạn phải tag nó chủ quan và làm cho nó wiki cộng đồng)
MarkJ

16
Bạn đang (hoặc đã) nghĩ về điều này ngược lại. Chính trình biên dịch không phân biệt chữ hoa chữ thường nên lỗi đọc 'biến SS đã được khai báo'. Nếu nó phân biệt chữ hoa chữ thường, bạn sẽ nhận được 'biến ss không được sử dụng' hoặc không có lỗi nào cả và có lỗi nếu bạn sử dụng thay thế biến này và biến khác.
Adriano Varoli Piazza

Câu trả lời:


108

Sự khác biệt giữa VBA và VB.NET chỉ là do VB.NET biên dịch liên tục ở chế độ nền. Bạn sẽ gặp lỗi khi biên dịch VBA.

Giống như Jonathan đã nói , khi lập trình, bạn có thể coi VB.NET là không phân biệt chữ hoa chữ thường ngoài so sánh chuỗi, XML và một số tình huống khác ...

Tôi nghĩ rằng bạn quan tâm đến những gì bên dưới mui xe. Chà, .NET Common Language Runtime có phân biệt chữ hoa chữ thường và mã VB.NET dựa vào thời gian chạy, vì vậy bạn có thể thấy nó phải phân biệt chữ hoa chữ thường trong thời gian chạy, ví dụ khi nó đang tìm kiếm các biến và phương thức.

Trình biên dịch và chỉnh sửa VB.NET cho phép bạn bỏ qua điều đó - bởi vì họ sửa lỗi trong mã của bạn.

Nếu bạn sử dụng các tính năng động hoặc ràng buộc muộn (Tùy chọn Tắt nghiêm ngặt), bạn có thể chứng minh rằng thời gian chạy cơ bản có phân biệt chữ hoa chữ thường. Một cách khác để thấy điều đó là nhận ra rằng các ngôn ngữ phân biệt chữ hoa chữ thường như C # sử dụng cùng một thời gian chạy, vì vậy thời gian chạy hiển nhiên hỗ trợ phân biệt chữ hoa chữ thường.

CHỈNH SỬA Nếu bạn muốn đưa IDE ra khỏi phương trình, bạn luôn có thể biên dịch từ dòng lệnh . Chỉnh sửa mã của bạn trong Notepad vì vậy nó có ssSSvà xem những gì các trình biên dịch hiện.

CHỈNH SỬA Trích dẫn từ Jeffrey Richter trong Nguyên tắc thiết kế .NET Framework trang 45.

Để rõ ràng, CLR thực sự phân biệt chữ hoa chữ thường. Một số ngôn ngữ lập trình, như Visual Basic, không phân biệt chữ hoa chữ thường. Khi trình biên dịch Visual Basic đang cố gắng giải quyết một cuộc gọi phương thức đến một loại được xác định trong ngôn ngữ phân biệt chữ hoa chữ thường như C #, trình biên dịch (không phải CLR) sẽ tìm ra trường hợp thực tế của tên phương thức và nhúng nó vào siêu dữ liệu. CLR không biết gì về điều này. Bây giờ nếu bạn đang sử dụng phản chiếu để liên kết với một phương thức, thì các API phản chiếu sẽ cung cấp khả năng thực hiện tra cứu không phân biệt chữ hoa chữ thường. Đây là mức độ mà CLR đưa ra phân biệt chữ hoa chữ thường.


Câu trả lời hay nhất mà tôi đã nghe cho đến nay. Có cách nào đó để chứng minh điểm này mà trình biên dịch và biên tập VB.Net để bạn bỏ qua điều đó không? Có cách nào để tắt tính năng tự động sửa lỗi không? Hoặc là có một cách để biên dịch một sln đó là không viết bằng VS IDE trong MSBuild mà sử dụng cả hai ssSSvà nó sẽ biên dịch và làm việc như mong đợi?
Todd Main

5
Bạn có thể tắt tính năng tự động sửa lỗi bằng cách gian lận. Nhấp chuột phải vào tệp vb và chọn "Mở bằng". Sau đó, chọn một cái gì đó như "Trình soạn thảo XML (Văn bản)". Bạn sẽ mất tất cả các chức năng dành riêng cho VB như tự động sửa.
Jonathan Allen

1 câu trả lời tuyệt vời, và câu hỏi hay cũng Otaku (tôi nghĩ rằng bạn đã biết nhưng muốn rút ra một định nghĩa tốt hey?)
Anonymous Loại

Trình biên dịch VB.NET / IDE không phân biệt chữ hoa chữ thường 100%. Ví dụ Dim pdfWriter As PDFWriterlà hoàn toàn hợp lệ. VB.NET cho phép bạn phân biệt giữa tên lớp và tên biến, đây là một điều thú vị, vì nó là thông lệ trong các ngôn ngữ phân biệt chữ hoa chữ thường.
thành

Cách VB phù hợp với khả năng tương tác. Ví dụ: Tạo một DLL trong C # với email là String và Email () dưới dạng thuộc tính với sự kiện inotifypropertychanged trong đó. C # sẽ biên dịch tốt và DLL sẽ được tạo. Cố gắng tham chiếu DLL này bằng VB hoặc bất kỳ ngôn ngữ nào tương tự. Nó sẽ cho biết có xung đột trong email biến / Email trong thư viện. Các công cụ phân tích mã chỉ ra đây là một vấn đề trong trình biên dịch C # không phải trong trình biên dịch VB.
Venkat

22

Một phần của vấn đề ở đây là bạn cần phân chia ngôn ngữ khỏi trải nghiệm IDE.

Là một ngôn ngữ, VB.NET chắc chắn không phân biệt chữ hoa chữ thường đối với các định danh. Gọi DateTime.Parsedatetime.parsesẽ liên kết với cùng một mã. Và không giống như các ngôn ngữ như C #, không thể xác định các phương thức hoặc kiểu mà chỉ khác nhau theo trường hợp.

Là một IDE, VB.NET cố gắng bảo toàn trường hợp của các số nhận dạng hiện có khi nó liệt kê một khối mã khá đẹp. Danh sách đẹp xuất hiện bất cứ khi nào bạn rời khỏi dòng mã logic hiện tại. Trong trường hợp này, bạn di chuyển khỏi khai báo thứ hai SS, người lập danh sách khá thông báo rằng có một định danh hiện có với tên đó và sửa nó để có trường hợp phù hợp.

Tuy nhiên, hành vi này hoàn toàn được thực hiện như một giá trị gia tăng của người dùng. Nó không phải là một phần của ngôn ngữ cốt lõi.


1
Cảm ơn Jared, thật thú vị khi biết rằng đó chỉ là IDE. Tôi vẫn không hiểu tại sao sẽ là một điều tốt nếu có nhiều hơn một cái tên đại diện cho những thứ khác nhau chỉ bằng sự khác biệt về chữ hoa chữ thường trong tên, nhưng tôi đoán đó là một ngày khác.
Todd Main

1
Tôi không nghĩ Jared có nghĩa đó chỉ là IDE. Tôi nghĩ rằng anh ấy đã nói trình biên dịch không phân biệt chữ hoa chữ thường, vì vậy nó ssđược coi là giống hệt SS, nhưng cũng là một trợ giúp để đọc IDE sửa SSthành sskhi bạn nhập. Vì vậy, ngay cả khi IDE không sửa trường hợp này, trình biên dịch vẫn sẽ thấy hai số nhận dạng giống hệt nhau.
MarkJ

2
"Tôi vẫn không hiểu tại sao sẽ là một điều tốt nếu có nhiều tên đại diện cho những thứ khác nhau chỉ bằng sự khác biệt về chữ hoa chữ thường trong tên" <- Tôi cũng cảm thấy như vậy trước khi chuyển từ VBA / VB6 / VB.NET sang C # , Tôi nghĩ rằng việc đặt tên chỉ khác nhau theo từng trường hợp có vẻ hoàn toàn nguy hiểm. Tuy nhiên, trên thực tế, nó được chứng minh là khá hữu ích và đáng ngạc nhiên là không dễ xảy ra lỗi.
Mike Rosenblum

2
@Mike Tôi rất không đồng ý với điểm đó. Tôi chưa bao giờ thấy những cái tên hỗn hợp có thể gây ra sự nhầm lẫn.
JaredPar

2
Có thật không? Ý tôi là một cái gì đó như void SetColor (color Color) {this.color = color}; Tôi nhận thấy rằng điều này có thể trông nguy hiểm, nhưng nó hoạt động trơn tru, trình biên dịch sẽ không để bạn mắc lỗi và IntelliSense cung cấp cho bạn các thành viên chính xác sau "màu". so với "Màu sắc". Điều làm tôi khó chịu ở đây là việc sử dụng "this" là không bắt buộc - nó được thực thi bởi FxCop và / hoặc StyleCop (tôi quên điều đó), nhưng tôi ước có một cài đặt để IDE luôn thực thi điều này khi truy cập lớp. các thành viên thay vì có khả năng cho phép phạm vi vô tình bị che khuất.
Mike Rosenblum

16

VB chủ yếu là không phân biệt chữ hoa chữ thường, nhưng vẫn có ngoại lệ. Ví dụ: các ký tự và khả năng hiểu của XML phân biệt chữ hoa chữ thường. So sánh chuỗi thường phân biệt chữ hoa chữ thường, không giống như T-SQL nói, nhưng có bộ chuyển đổi trình biên dịch để thực hiện so sánh chuỗi phân biệt chữ hoa chữ thường. Và tất nhiên có những trường hợp phức tạp khi xử lý kế thừa, COM và Thời gian chạy ngôn ngữ động.


3
Những điểm tốt về trường hợp quan trọng như Văn bản XML và so sánh chuỗi. Nhưng khi chúng ta nói rằng nó chủ yếu là không phân biệt chữ hoa chữ thường, thì chính xác thì chúng ta đang nói về điều gì? Chuyển sang Outlook VBA, chỉ như một ví dụ, nếu tôi nhập Dim mi as mailitemsubject = mi.subject, tên đối tượng sẽ được tự động sửa thành MailItemmi.Subject. Trình biên dịch có quan tâm không (vì nó sẽ luôn tự động sửa lỗi này) hay đây là mã đẹp hay ...?
Todd Main

1
Trình biên dịch không quan tâm. Bạn có thể kiểm tra điều này bằng cách chỉnh sửa tệp trong notepad và sử dụng trình biên dịch dòng lệnh.
Jonathan Allen

9

Có, trình biên dịch VB.NET xử lý số nhận dạng theo cách không phân biệt chữ hoa chữ thường. Và có, điều đó có thể gây ra sự cố khi nó sử dụng các hợp ngữ được viết bằng ngôn ngữ khác hoặc sử dụng các thành phần COM. Trường hợp trước đây được đề cập trong Đặc tả ngôn ngữ chung . Quy tắc liên quan là:

Để hai số nhận dạng được coi là khác biệt, chúng phải khác nhau nhiều hơn là trường hợp của chúng.

Trường hợp COM được trình xây dựng thư viện kiểu xử lý một cách thô thiển, nó buộc cách viết hoa của các số nhận dạng có cùng tên phải giống hệt nhau. Ngay cả khi những định danh đó có những vai trò khác nhau. Nói cách khác, một tham số phương thức với tên "chỉ mục" sẽ buộc tên phương thức "Chỉ mục" được chuyển thành "chỉ mục". Điều đó đã tạo ra khá nhiều đầu, như bạn có thể tưởng tượng :)


6

VB bảo toàn chữ hoa chữ thường (trong IDE) nhưng không phân biệt chữ hoa chữ thường . Nó giống như hệ thống tệp Windows theo một cách nào đó. Hello.txt và hello.txt được coi là cùng một tên tệp.

IDE giả định rằng khai báo một biến là trường hợp "đúng" cho biến đó và điều chỉnh mọi trường hợp của biến đó khớp với khai báo. Nó thực hiện điều này vì lý do bắt mắt và nhất quán, nhưng không phải vì chức năng.

Tôi đã thấy một số trường hợp trong đó trường hợp không được tự động thay đổi để phù hợp với khai báo và câu lệnh hoạt động giống nhau. Bạn cũng có thể sử dụng bất kỳ trình soạn thảo văn bản nào để viết mã biên dịch tốt trong các trường hợp khác nhau.

Một lưu ý phụ:

Hầu hết DÂN nghĩ một cách case-insensitive. Khi chúng ta nhìn thấy từ "dog", từ đó sẽ được chuyển thành ý nghĩa trong tâm trí của chúng ta. Ý nghĩa của từ không dựa trên trường hợp (nghĩa là bất kể nếu đánh vần nó là "DOG", "DoG", hoặc "dOG" vẫn sủa.) MÁY TÍNH xem các từ như những túi bit rời rạc. Chữ hoa và chữ thường là các mẫu bit khác nhau, do đó cũng khác nhau.

Vì hầu hết các lập trình viên là con người, phân biệt chữ hoa chữ thường có vẻ thích nghi hơn với cách mọi người suy nghĩ và phân biệt chữ hoa chữ thường thì con người thích nghi hơn với cách họ suy nghĩ với những ràng buộc của máy móc.


4
Ngoại trừ việc các lập trình viên cần phải phân biệt giữa các đối tượng và các lớp, và thường sử dụng một thay đổi trong trường hợp để làm như vậy (không bắt buộc, chỉ là một quy ước). Vì vậy, nó object.method()Object.Method()được công nhận ngay lập tức như các tham chiếu đối tượng và lớp và các phương thức (nếu bạn tuân theo quy ước mã hóa đó). Tương tự như trong tiếng Anh, bạn phân biệt danh từ riêng và đầu câu bằng chữ hoa. Vì vậy, khi đọc hoặc lập trình, tôi không nghĩ chữ hoa chữ thường, nếu không, tôi sẽ thiếu một số ý nghĩa.
Jason S

@Jason, Đó là tất cả về những gì bạn đã quen. Những sinh viên mới lập trình C đưa ra vô số phàn nàn về phân biệt chữ hoa chữ thường lúc đầu, sau đó, sau một vài khóa học, họ sẽ quen với nó. Đối tượng.method () và Object.Method () chỉ là một quy ước và là trường hợp mạnh nhất cho phân biệt chữ hoa chữ thường. Tôi đã phải sửa đổi một chương trình được viết bởi người khác có hai biến có tên là Temp và Temp trong cùng một phạm vi, và tôi sẽ nói với bạn rằng rất khó để giữ chúng thẳng trong đầu. Và trong khi chúng ta có thể nhận ra một danh từ chung bằng cách viết hoa, các từ "bob" và "Bob" có nghĩa giống nhau trong não của chúng ta.
Andrew Neely

Tại sao IDE bảo toàn trường hợp trong trường hợp đó? (lấy làm tiếc). Tôi nghĩ rằng IDE bảo tồn trường hợp bởi vì các nhà thiết kế MS nghĩ rằng trường hợp có một số ngữ nghĩa, trong não, mà nó có. Nhưng trên thực tế, VB IDE xem xét formFormgiống nhau, điều này đối với tôi, thật khó hiểu. Trong trường hợp này (xin lỗi một lần nữa), of tempTempbạn có thể dễ dàng sử dụng các công cụ tái cấu trúc trong C # để đổi tên Tempthành bobTemphoặc bất cứ điều gì. Tuy nhiên, tôi đang duy trì một số VB và ai đó đã đi và thực hiện Dim form As Form. Bây giờ khi tôi đổi tên, nó đổi tên cả tham chiếu lớp và đối tượng. Chà!
Jason S

@Jason, trong VB tôi luôn nói "Dim aform as Form", nhưng tôi lạc đề. VB hỗ trợ phân biệt chữ hoa chữ thường trong tìm kiếm. Ngoài ra, tôi sẽ tìm kiếm "As Form" và thay thế nó bằng "somethingstupid", sau đó đổi tên form thành một cái gì đó hợp lý, sau đó đổi tên "somethingstupid" trở lại "As Form". Tôi thực sự thích nó thay đổi trường hợp, bởi vì nó xác minh rằng tôi đã không sử dụng tên biến.
Andrew Neely

Vâng, nhưng điều này không thể thay thế cho một công cụ tái cấu trúc sẽ phân biệt giữa tham chiếu lớp và cá thể khi tên giống nhau (hoặc chỉ khác nhau theo trường hợp trong VB). Các công cụ tái cấu trúc C # dường như có thể làm được điều đó. Tôi không đặt tên các lớp và cá thể giống nhau. Trong C # tôi sẽ sử dụng trường hợp để phân biệt, nhưng trong VB tôi không thể làm như vậy nên tôi sử dụng các chữ cái để thêm vào trước. Rõ ràng vấn đề của tôi là tôi đang duy trì một ai đó mã đã sử dụng cùng một tên. Nhưng cuộc thảo luận này đang trở nên quá lớn để có ý kiến, vì vậy tôi sẽ để nó ở đây.
Jason S

5

Đây là một phần của trình soạn thảo bạn đang sử dụng, chúng có thể hoạt động khác nhau nhưng thực tế là Visual Basic thực sự là ngôn ngữ không phân biệt chữ hoa chữ thường. Vì vậy, ssSSgiống nhau.

Vui lòng xem hướng dẫn Khái niệm cơ bản của VB.NET để biết thêm thông tin :)


ah điều đó thật thú vị. có chỗ nào tôi tra cứu chi tiết này không? tôi chưa thử nghiệm, nhưng nghĩ về VBScript, bạn có thể đúng.
Todd Main

@Otaku: vui lòng xem lại câu trả lời của tôi, tôi đã cung cấp liên kết ngay bây giờ. Cảm ơn
Sarfraz

Tôi khá quen thuộc với VB, cảm ơn bạn :) Tôi không chắc bạn muốn tôi xem trang đó.
Todd Main

3

Tôi không chắc tôi hiểu bạn? VB không phân biệt chữ hoa chữ thường, do đó ss và SS là cùng một biến, do đó trình biên dịch khiếu nại chính xác rằng bạn đã khai báo lại biến.

Tôi nghĩ rằng Biến không phân biệt chữ hoa chữ thường, nhưng tên hàm thì có.


nhưng nếu tôi sử dụng ssvà sau đó nhập SS, nó sẽ được tự động điều hướng đến ss, dẫn đến việc tôi tin rằng trình biên dịch thực sự quan tâm đến trường hợp.
Todd Main

5
@oTAKU: Đó là IDE thay đổi trường hợp, không phải trình biên dịch.
John Saunders

2
VB vẫn không thực sự quan tâm đến trường hợp. IDE đang cố gắng làm sạch mã để giữ nguyên các biến trong suốt.
guitarthrower

1

Có, VB không phân biệt chữ hoa chữ thường. Nó đôi khi ném những người không quen với nó cho một chút vòng lặp.


1

Người ta không cần phải cố gắng hết sức trong VB.NET để tạo mã với các "cách viết" viết hoa / viết thường khác nhau của một mã định danh. Việc thay đổi cách viết hoa của số nhận dạng trong tệp được khai báo mà không sử dụng chức năng "Đổi tên" sẽ không làm cho tên được cập nhật trong các tệp khác, mặc dù việc chỉnh sửa bất kỳ dòng nào chứa tên sẽ khiến tên đó phù hợp với định nghĩa hiện tại.

Bằng cách này, người ta có thể xác định rằng VB.NET chủ yếu là không phân biệt chữ hoa chữ thường, nhưng nó làm cho trường hợp của số nhận dạng có sẵn cho CLR có thể sử dụng thông tin đó theo cách phân biệt chữ hoa chữ thường.


1

Tôi chỉ có thể đưa ra điều này, điều mà tôi nhớ lại từ những cuốn sách văn bản lập trình của mình vào đầu những năm 80, đó là các ngôn ngữ nhạy cảm với trường hợp, (vào thời điểm đó) hoàn toàn nhằm giảm lỗi thời gian biên dịch. Điều đó có nghĩa là, "sự nghiêm ngặt" nhằm mục đích phát triển kỷ luật mã hóa có độ chính xác cao hơn. Vì nó đã tạo ra việc bổ sung nhãn thích hợp cho các biến, lớp, phương thức, hàm và bất kỳ thứ gì khác mà bạn muốn đưa vào đó, cũng đã phát triển.

Tôi nhớ lại hầu như tất cả những cuốn sách đó đều bao gồm một mẫu đề xuất cho viết hoa đầu dòng, viết thường, v.v. Như chúng ta đều biết, phần lớn trong số đó đã bị loại bỏ hoặc tôi phải nói là bị bỏ qua trong thực tế, để dành cho các nhà sản xuất cao cấp, và Các giải pháp CASE hoặc cho những giải pháp đã đạt đến cấp độ kỹ năng cao hơn. Tôi nghĩ rằng mọi người đều trải nghiệm đường cong học tập này.

Với sự tiến bộ của các ngôn ngữ này và IDE, câu hỏi hay hơn sẽ trở thành, ngôn ngữ nào cải thiện thời gian dành cho nhà phát triển của tôi? Tất nhiên nếu bạn không quen thuộc với từng ngôn ngữ khác nhau, các lựa chọn của bạn sẽ bị hạn chế.


1

Tôi sẽ cố gắng trả lời câu hỏi thứ hai của bạn.

"điều này có đủ thuyết phục để tôi xem xét chuyển sang C # nếu trường hợp VB.NET bằng cách nào đó hạn chế những gì tôi có thể làm với mã không?"

Tạo một WCF WebService bằng C #. Tạo một DataContract (1 Lớp). Một với thuộc tính "chuỗi email". Khác với "chuỗi Email" làm thuộc tính khác. Lựa chọn của bạn hiểu là email cá nhân hay email văn phòng. Hoặc nó có thể ở hai DataContract khác nhau.

Đối với C #, điều này là tốt. Dịch vụ web được tạo tốt. Chương trình AC # có thể dễ dàng tạo một WSDL và mọi thứ đều ổn.

Bây giờ hãy thử tạo một WSDL bằng VB (bất kỳ phiên bản nào). Nó sẽ cho biết "email" đã được khai báo và quá trình tạo WSDL không thành công.

Giống như mọi người, tôi cho rằng đây là một nhược điểm trong ngôn ngữ VB. Nhưng!!!

Sử dụng FxCOP và phân tích mã C # ban đầu. FxCOP cho biết sử dụng email / Email là một vấn đề. Khuyến nghị sử dụng tên khác hỗ trợ trường hợp phân biệt. Cũng lưu ý cho đến nay, .NET framework có 106 ngôn ngữ lập trình và có nhiều ngôn ngữ BẬT phân biệt chữ hoa chữ thường. Tất cả chúng ta đang hướng tới đám mây và muốn các dịch vụ của mình có thể truy cập được bằng tất cả các nền tảng / ngôn ngữ lập trình.

Vì vậy, phân biệt chữ hoa chữ thường là lựa chọn của bạn trong chương trình của bạn và nếu bạn là chàng trai C, bạn sẽ thích điều đó. Nếu chương trình sẽ được sử dụng / truy cập bởi các chương trình không phải C khác, bạn cần hỗ trợ phân biệt chữ hoa chữ thường nhưng ngôn ngữ của bạn là do bạn lựa chọn.

http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET http://www.vbrad.com/article.aspx?id=65


Đám mây sử dụng URI có phân biệt chữ hoa chữ thường (đặc biệt quan trọng đối với proxy và máy chủ bộ nhớ cache).
binki

1

Ẩn ký hiệu (ví dụ: trường ẩn cục bộ) cũng không phân biệt chữ hoa chữ thường.

Đây là một ví dụ :

Public Class C
    Public Name As String

    Public Function M(name As String) As Boolean
        Return String.Equals(name, Name) ' case differs
    End Function
End Class

Đầu ra của trình biên dịch VB.NET được dịch ngược thành (và do đó tương đương với) C # sau:

public class C
{
    public string Name;

    public bool M(string name)
    {
        return string.Equals(name, name); // both lowercase
    }
}

string.Equalsđược thông qua trường hai lần. Địa phương được ẩn, không phân biệt trường hợp. Ngôn ngữ không phân biệt chữ hoa chữ thường.

Để tham chiếu rõ ràng đến thành viên, chẳng hạn như trường này, bạn phải tham khảo thành viên qua Me:

Return String.Equals(name, Me.Name) ' differentiate field from local

0

Tôi chưa thấy ai bình luận về câu hỏi thứ 2 rõ ràng của bạn ở cuối: "2: điều này có đủ thuyết phục để tôi cân nhắc chuyển sang C # nếu trường hợp VB.NET bằng cách nào đó hạn chế những gì tôi có thể làm với mã không?"

tôi thích cách tiếp cận tùy chọn hơn mà C # cho phép lập trình viên lựa chọn hơn là giới hạn các tùy chọn của lập trình viên. tôi rất thích C #, nhưng chỉ riêng về phân biệt chữ hoa chữ thường, tôi thậm chí sẽ không nghĩ rằng nó gần giống với việc học một ngôn ngữ chỉ vì nó phân biệt chữ hoa chữ thường. tất cả các tính năng đều là vấn đề và khi tôi xem xét ưu điểm của cả C # và VB.NET, tôi rất thích C #. nhưng tôi sẽ cung cấp cho bạn một quan điểm cân bằng thực sự, thiên vị có, bởi vì tôi có sở thích, nhưng tôi cũng sẽ thành thật về những nhược điểm của C #.

trước hết, cả hai ngôn ngữ đều có ưu điểm và nhược điểm. những khác biệt mà bạn có thể thực hiện ở một ngôn ngữ mà không thể thực hiện được ở ngôn ngữ kia đang giảm dần vì, may mắn thay, Microsoft đang cải thiện cả hai ngôn ngữ và chúng dường như không thể hiện sự phân biệt bất công đối với cả hai ngôn ngữ.

khi C # ra mắt lần đầu, VB không có các chú thích XML của nó mà bạn có thể đặt trước các phương thức mà tôi yêu thích trong C #. tôi ghét điều đó trong VB.NET. nhưng tôi đã thấy trong nhiều năm qua, nhiều tính năng không có trong ngôn ngữ này được thêm vào ngôn ngữ khác. (cùng một nhóm các nhà phát triển MS phát triển cả C # và VB, do đó, có nghĩa là các tính năng phải trở nên khá giống nhau.)

nhưng bạn yêu cầu những gì C # có mà VB thì không. đây là một số tôi có thể nghĩ đến ngay lập tức:

1: C # ngắn gọn hơn và ít nhập hơn .. theo NHIỀU cách! Tôi thậm chí đã thấy sự ngu ngốc khi nói khi yêu cầu ngược lại được đưa ra, rằng VB tiết kiệm việc nhập. nhưng hãy lắng nghe những người nói với bạn rằng họ sử dụng cả hai ngôn ngữ và cả hai ngôn ngữ hiếm khi được họ sử dụng. tôi sử dụng cả C # VB, C # ở nhà vì tôi thích nó (và khi tôi làm việc với C # tại nơi làm việc), và yêu cầu công việc gần đây hơn của tôi rằng tôi sử dụng VB chứ không phải C #. vì vậy tôi đang sử dụng VB thường xuyên hơn bây giờ (khoảng 10 tháng nay), nhưng theo lời khai cá nhân của tôi, tôi thích C # hơn, và về cách gõ thực tế, VB gõ nhiều hơn đáng kể. một ví dụ mà tôi đã đọc trong đó ai đó thực sự cố gắng nói VB ngắn gọn hơn, đã đưa ra một ví dụ 'with ...' với một biến dài trong with, vì vậy trong VB, bạn chỉ có thể sử dụng '.property'. đây là sự ngu ngốc khi cho rằng VB cần ít đánh máy hơn. Có một số điều (và không chỉ ví dụ này) trong đó VB ngắn hơn, nhưng nhiều khi C # ngắn gọn hơn, trong thực tế.

nhưng lý do lớn nhất tôi tin rằng C # ngắn gọn hơn, là các câu lệnh dài dòng "IF / THEN" của VB. câu lệnh if là phổ biến. trong C # không có từ 'then' để gõ! :) cũng như tất cả các câu lệnh 'end ...' mà trong c #, thường chỉ là một dấu ngoặc nhọn đóng '}'. Tôi đã đọc rằng một số người cho rằng sự dài dòng hơn này trong VB.NET là một lợi thế của VB vì một số câu lệnh / ký hiệu khối đóng có thể được lồng vào nhau và kết thúc ngay bên cạnh nhau, nhưng tôi hoàn toàn không đồng ý. một người hầu như luôn có thể viết một chương trình bằng C # hoặc VB tốt hơn một lập trình viên khác bởi vì bản sửa đổi mã tiếp theo có thể được thiết kế tốt hơn. điều này áp dụng cho 'vô số dấu ngoặc nhọn đóng trong C #' cộng với nếu các khối lồng nhau đều cùng loại như một số IF lồng nhau thì VB gặp phải vấn đề tương tự như trong C #. điều này không có lợi trong VB. tình huống này chính xác là lý do tại sao tôi muốn nhận xét biểu tượng kết thúc hoặc câu lệnh kết thúc của tôi đi kèm với cả hai ngôn ngữ. vâng, điều này là dài dòng hơn để làm, nhưng bằng cả hai ngôn ngữ, bạn có tùy chọn để rõ ràng, điều này quan trọng trong các trường hợp cụ thể dựa trên phán đoán, tình huống. tôi nghĩ rằng mã rõ ràng là khá quan trọng.

2: VB không có ý nhiều dòng. khi tôi làm việc với VB, tôi không bận tâm. sau đó tôi đã chuyển sang một vài ngôn ngữ kiểu C. bây giờ tôi trở lại chủ yếu sử dụng VB.NET tại nơi làm việc và tôi nhớ chúng. nó chỉ là một cái gì đó bạn thấy thuận tiện, và sau đó phải mất. :(

3: 'andalso' và 'orelse' của VB khá khó chịu khi gõ tất cả những thứ đó khi trong C # nó chỉ đơn giản là '&&' và '||'. một lần nữa, gõ ít hơn. điều này không hiếm trong mã của tôi ở cả VB và C #. nếu có, đối với chức năng, 'OR' vs 'OrElse' thường không quan trọng ngoại trừ 'OrElse' nhanh hơn cho máy tính, vì vậy nếu một lập trình viên chỉ sử dụng 'Or' và 'And' trong VB, thì nó tạo ra mã ít tối ưu hơn cho một người thích sự rõ ràng của mã. 'Hoặc' dễ đọc hơn nhiều so với 'OrElse'.

4: linh hoạt hơn trong việc đặt mã trong C #. khi một dòng dài và bạn muốn đặt nó ở dòng tiếp theo, tôi ghét việc VB.NET 'kiểm soát' đọc mã của tôi. C # làm điều đó một chút, nhưng tôi thấy nó hữu ích hơn trong C #, trong đó trong VB, nó kiểm soát nhiều hơn. nhưng đây là VB.NET IDE so với C # IDE hơn là chính ngôn ngữ. nhưng tôi không biết liệu bạn có muốn cả hai hay chỉ đơn thuần là các tính năng ngôn ngữ mà không có sự khác biệt về IDE.

5: một điều tôi thực sự bỏ lỡ là chỉ tạo một khối mã mới trong C #, tôi có thể có nhiều điều xảy ra trong một phương thức và tôi muốn khai báo một biến trong một khối mã rất nhỏ nhưng không có biến đó được khai báo bên ngoài khối đó trong toàn bộ phương pháp. trong C #, chúng ta chỉ có thể tạo một khối mới bằng '{' và kết thúc bằng '}'. VB không có tính năng như vậy, nhưng đối sánh gần nhất của nó là khối 'If True Then' và 'End If' vô điều kiện. (lưu ý 2 ký tự C # và 18 ký tự VB.NET tương đương một lần nữa ... gõ nhiều hơn trong VB.)

6: toán tử tăng và giảm tự: ++ và - như trong myVariable++hoặc ++myVariablehoặc các phiên bản giảm dần tương đương. điều này rất hữu ích ... đôi khi. đây là một ví dụ về mã thực tế khi tôi đã bỏ lỡ C # rất nhiều:

// C#:
while (txt.Length > x)
{
    thisChar = txt[x];
    if (charsAllowedWithoutLimit.Contains(thisChar)) { ++x; }
    else if (allowLettersWithoutLimit && char.IsLetter(thisChar)) { ++x; }
    else if ((x2 = charsAllowedWithLimit.IndexOf(thisChar)) >= 0)
    {
        ++x; if (++usedCountA[x2] > charAllowedLimit[x2]) { break; }
    }
    else { break; }
}

' VB.NET:
While (txt.Length > x)
    thisChar = txt(x)
    If (charsAllowedWithoutLimit.Contains(thisChar)) Then
        x += 1
    ElseIf (allowLettersWithoutLimit AndAlso Char.IsLetter(thisChar)) Then
        x += 1
    Else
        x2 = charsAllowedWithLimit.IndexOf(thisChar)
        If (x2 >= 0) Then
            x += 1
            usedCountA(x2) += 1S
            If usedCountA(x2) > charAllowedLimit(x2) Then Exit While
        Else
            Exit While
        End If
    End If
End While

Và chỉ để đưa ra một ví dụ RẤT tốt về quy tắc C #, đây là mã khác mà cá nhân tôi đã viết gần đây:

// C#
public static bool IsNotWithin(this Byte   v, Byte   v1, Byte   v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this SByte  v, SByte  v1, SByte  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int16  v, Int16  v1, Int16  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int32  v, Int32  v1, Int32  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int64  v, Int64  v1, Int64  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt16 v, UInt16 v1, UInt16 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt32 v, UInt32 v1, UInt32 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt64 v, UInt64 v1, UInt64 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Decimal v, Decimal v1, Decimal v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }

public static bool IsWithin(this Byte   v, Byte   v1, Byte   v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this SByte  v, SByte  v1, SByte  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int16  v, Int16  v1, Int16  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int32  v, Int32  v1, Int32  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int64  v, Int64  v1, Int64  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt16 v, UInt16 v1, UInt16 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt32 v, UInt32 v1, UInt32 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt64 v, UInt64 v1, UInt64 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Decimal v, Decimal v1, Decimal v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }

' And the VB equivalent is a mess! Here goes:
<Extension()>
Public Function IsNotWithin(v As Byte, value1 As Byte, value2 As Byte) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As SByte, value1 As SByte, value2 As SByte) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As Int16, value1 As Int16, value2 As Int16) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the % suffix means 'As Integer' in VB.
<Extension()>
Public Function IsNotWithin(v%, value1%, value2%) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the & suffix means 'As Long' in VB.
<Extension()>
Public Function IsNotWithin(v&, value1&, value2&) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt16, value1 As UInt16, value2 As UInt16) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt32, value1 As UInt32, value2 As UInt32) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt64, value1 As UInt64, value2 As UInt64) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the @ suffix means 'As Decimal' in VB.
<Extension()>
Public Function IsNotWithin(v@, value1@, value2@) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsWithin(v As Byte, value1 As Byte, value2 As Byte) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As SByte, value1 As SByte, value2 As SByte) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As Int16, value1 As Int16, value2 As Int16) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the % suffix means 'As Integer' in VB.
<Extension()>
Public Function IsWithin(v%, value1%, value2%) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the & suffix means 'As Long' in VB.
<Extension()>
Public Function IsWithin(v&, value1&, value2&) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt16, value1 As UInt16, value2 As UInt16) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt32, value1 As UInt32, value2 As UInt32) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt64, value1 As UInt64, value2 As UInt64) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the @ suffix means 'As Decimal' in VB.
<Extension()>
Public Function IsWithin(v@, value1@, value2@) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

Có lẽ đây là bằng chứng cho thấy C # ngắn gọn hơn. Nhưng không phải tất cả các lập trình viên đều thích sự ngắn gọn. Một số thích đọc "if a <b then ..." vì nó tự nhiên hơn với ngôn ngữ của con người. Và điều đó thật tốt. Sở thích là tốt. Đối với tôi, nỗ lực của đôi tay là một yếu tố tôi coi trọng và tôi nghĩ rằng bất kỳ ai cũng có thể quen với việc suy nghĩ theo bất kỳ ký hiệu nào họ thích, vì "if" và "then" là các ký hiệu của bảng chữ cái và câu lệnh "if (condition)" của C #; " cú pháp cũng là ký hiệu. một cái chỉ gần với cú pháp của người không phải lập trình hơn cái kia. tôi thích cái ngắn gọn hơn.

Tôi cũng nghĩ rằng cần phải sử dụng 'c' sau các ký tự ký tự trong VB để biến nó thành một ký tự theo nghĩa đen thay vì một chuỗi là điều khó chịu. Tôi thích sự ngắn gọn của C # với điều đó nhiều hơn nữa. khi một phương thức yêu cầu một ký tự là ký tự, bạn cần cung cấp một ký tự không phải là một chuỗi với độ dài một ký tự, vì vậy đôi khi bạn buộc phải sử dụng ":"ctrong VB trong khi trong C # thì đúng như vậy ':'. tôi nghĩ rằng đây là nit-hái tho.

Để công bằng, tôi sẽ nói có lợi thế tôi muốn VB như không cần phải đặt dấu ngoặc trống sau khi các cuộc gọi phương pháp, giống như Dim nameUpper$ = name.ToUpperInvariantnơi C # đòi hỏi các dấu ngoặc rỗng: string nameUpper = name.ToUpperInvariant(). hoặc gấp đôi như cắt tỉa nó quá: Dim nameUpper$ = name.Trim.ToUpperInvariantvs string nameUpper = name.Trim().ToUpperInvariant(). Tôi thích cách sử dụng ngắn gọn của VB về cách tôi vừa sử dụng $ở trên để làm mờ nó 'As String' trong đó C # không có các phím tắt đó. VB có các phím tắt đó cho các loại Chuỗi, Số nguyên, Dài, Thập phân, Đơn và Đôi, nhưng nhược điểm là nó ít rõ ràng hơn, vì vậy tôi sử dụng nó một cách thận trọng. nhưng tuy nhiên, tôi thích mã ngắn gọn hơn.

Chà, đó chỉ là một số thông tin từ lập trình viên dày dạn kinh nghiệm này, và như tôi xem xét, đây là 'lời khai' lập trình của tôi về C # vs VB. cả hai đều là ngôn ngữ tốt tho, theo ý kiến ​​của tôi. nhưng có, tôi vẫn thích C # hơn.

ps Vì tôi dự định lập trình trong phần lớn cuộc đời mình, tôi thậm chí còn học lại cách gõ bằng bàn phím hiệu quả nhất: bàn phím Dvorak, mất khoảng 1/3 nỗ lực để gõ tiếng Anh so với bàn phím Qwerty. tìm kiếm. có lẽ bạn cũng có thể muốn chuyển đổi. ;) nó giúp tôi đánh máy dễ dàng hơn 67%! :) Tôi khuyến khích bất cứ ai suy nghĩ bên ngoài và đánh giá hiệu quả tốt hơn trong công việc của bạn. Bố cục bàn phím đơn giản hóa Dvorak và C # đã làm được điều này cho tôi. :)

PSS tôi sẽ so sánh Dvorak và C # về số liệu thay vì bố cục bàn phím Qwerty và VB với các phép đo Empirial. Dvorak, metric và C # chỉ là 'sạch'. NHƯNG VB không thực sự thua xa. Nhưng nó thực sự cần phải tương thích ngược với mã VB6 cũ và mã .NET trước, như 'Or' vs 'OrElse' và 'IIF ()'.

Tôi kết thúc với một sự thận trọng. Hãy thận trọng hơn khi lắng nghe những người không thực sự biết họ đang nói về điều gì. Một nửa của tất cả các nhược điểm chống lại cả VB và C # là khôngbất kỳ vấn đề nào nữa, và mọi người vẫn đăng bài về việc họ không biết gì về những nhược điểm thực sự vẫn tồn tại trong ngôn ngữ. Ví dụ tốt nhất mà tôi có thể nghĩ đến là nhận xét XML cho các phương pháp sử dụng dấu nháy đơn ba trong VB hoặc ký hiệu nhận xét dấu gạch chéo ba trong C #. Nhưng hãy tự mình phân biệt xem một người đang nói do thiếu hiểu biết hay do kinh nghiệm. Lời khai cá nhân có nghĩa là họ biết từ kinh nghiệm thực tế của họ. Và sau khi ai đó có nhiều kinh nghiệm trong đó, thì hãy vểnh tai lên. Tôi có hơn 10 năm kinh nghiệm trong cả C # và VB. Và nó tóm gọn lại điều này: cả hai đều là (rất) ngôn ngữ tốt. Và hầu hết sự khác biệt, bạn có thể thấy ngay lập tức trong vòng 5 phút sau khi đọc mã. Nhưng có, các tính năng khác có thể mất nhiều năm để tìm ra điểm chấp. Và một điểm chấp mà tôi biết (trong C #), tôi có thể ' tôi thậm chí không nghĩ đến một tình huống thực tế mà nó sẽ hữu ích. Vì vậy, có lẽ đó không phải là một điểm chấp.

Chúc bạn viết mã vui vẻ!


Tôi đánh giá cao tất cả các chi tiết, nhưng ví dụ của bạn không sử dụng phân biệt chữ hoa chữ thường / không phân biệt chữ hoa chữ thường (theo như tôi có thể nói) để cho thấy lý do tại sao C # bằng cách nào đó "tốt hơn".
Todd Main

Tôi đã cố gắng trả lời câu hỏi thứ hai bằng một ví dụ trực tiếp.
Venkat

@ToddMain, chính xác. Và ví dụ của tôi không sử dụng phân biệt chữ hoa chữ thường để chỉ ra lý do tại sao C # tốt hơn vì câu hỏi không đặt ra câu hỏi tại sao phân biệt chữ hoa chữ thường làm cho nó tốt hơn. Bên cạnh đó, tôi tin rằng tính năng này nói lên chính nó. Và tôi tin rằng logic là điều cơ bản mà hầu hết mọi người có thể tự suy ra. Nhưng nếu ai đó hỏi, tôi rất sẵn lòng giúp đỡ họ thông qua logic. Nhưng đó, bạn của tôi, theo tôi, là một câu hỏi khác. ;)
Shawn Kovac

Trên thực tế, đó là một trong hai câu hỏi được hỏi trong bài viết gốc. Đó không phải là điều hiển nhiên, đó là lý do tại sao tôi hỏi. Nhưng đừng lo lắng về việc không giải quyết được câu hỏi.
Todd Main

@ToddMain, tôi hiểu ý bạn. thực sự rất công bằng. :) Cảm ơn vì đã mở rộng tầm mắt của tôi với điều này. :)
Shawn Kovac

0

VB.NET không phân biệt chữ hoa chữ thường.

Ví dụ:

1.

Dim a As Integer
Dim A as Integer

2.

Sub b()
    'Some statement(s) here
End Sub
Sub B()
    'Some statement(s) here
End Sub

3.

Function c() As Integer
    'Some statement(s) here
End Function
Function C() As Integer
    'Some statement(s) here
End Function

Tất cả các mã này sẽ xuất hiện một LỖI TOÀN THỜI GIAN .

Đối với ví dụ đầu tiên, lỗi sẽ được hiển thị, cho biết "Biến cục bộ 'A' đã được khai báo trong khối hiện tại.".

Trong khi đối với ví dụ thứ 2 và thứ 3, lỗi sẽ được hiển thị cho biết "'Public Sub b ()' có nhiều định nghĩa với các chữ ký giống nhau." và "'Public Function c () As Integer' có nhiều định nghĩa với các chữ ký giống hệt nhau."

Từ những lỗi này, lưu ý rằng các lỗi được ném vào các vị trí khác nhau cho các biến và thủ tục / hàm. Đối với các biến, lỗi được đưa ra ở khai báo thứ hai trong khi đối với các thủ tục / hàm, nó được đưa ra ở khai báo / định nghĩa đầu tiên của mã giống nhau.

Như người dùng đã nói trong một bình luận ở đâu đó ở trên, mã VB.NET liên tục được kiểm tra và / hoặc sửa chữa trong nền; bạn có thể thấy lỗi này trong cửa sổ "Danh sách lỗi" trong VS IDE. Và vì đây là LỖIKHÔNG PHẢI CẢNH BÁO , mã sẽ không biên dịch cho đến khi lỗi được giải quyết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.