函式預設引數(C )

2021-06-16 07:52:53 字數 1128 閱讀 5482

大家都知道在c++中,我們可以為方法的引數指定乙個預設值,像這樣:

void foo(int i = 100);

當我們以這種形式呼叫方法的時候: foo(); 實際上引數i被賦於了預設值,所以相當於呼叫了foo(100);

然而在c#中是不支援引數的預設值的,那麼如果我們要用到類似的功能應該怎麼實現呢?考慮下面這個例子:

class 

buffer

private int

buf;

}首先當然要為buffer提供乙個無參的建構函式過載:

class

buffer

public

buffer():

this

(100)

private int

buf;

}    

但這個方法有乙個問題就是我們把buffer的預設大小hard-coding到了**裡,這有兩個弊端,一是損害了**的可讀性,二是用以上方法,如果buffer有多個過載的建構函式都用到buffersize的預設值,一旦你要修改預設值的大小,不得不同時修改多處程式,一旦漏掉了其中的乙個,說不定就麻煩大了。

所以,正確的方法是為buffersize提供乙個const的預設值:

class

buffer

public

buffer():

this(

defaultbuffersize)

private int

buf;

}觀察編譯器為public buffer()產生的il**

.method public hidebysig specialname rtspecialname 

instance void  .ctor() cil managed

// end of method buffer::.ctor

defaultbuffersize的值在相應的呼叫處被替換成了字面常量(這其實也就是const成員的特性),所以使用defaultbuffersize不會影響public buffer()的執行效率。而由於const成員隱含了static的特性,所以乙個buffer類只有乙個defaultbuffersize的變數,效能的影響也是很小的。

我們可以看到.net 類庫中的許多類都使用了這種方法

C 函式預設引數

使用預設引數時的注意事項 有函式宣告 原型 時,預設引數可以放在函式宣告或者定義中,但只能放在二者之一 double sqrt double f 1.0 函式宣告 double sqrt double f 函式定義 沒有函式 原型 時,預設引數在函式定義時指定.沒有 函式宣告 double sqrt...

C 函式預設引數

c 中允許為函式提供預設引數,又名預設引數。使用預設引數時的注意事項 有函式宣告 原型 時,預設引數可以放在函式宣告或者定義中,但只能放在二者之一 double sqrt double f 1.0 函式宣告 double sqrt double f 函式定義 沒有函式 原型 時,預設引數在函式定義時...

C 函式預設引數

預設引數是指當函式呼叫中省略了實參時自動使用的乙個值。例如,如果將void wow int n 設定成n有預設值為1,則函式呼叫wow 相當於wow 1 如何設定預設值 必須通過函式原型。由於編譯器通過檢視原型來了解函式所使用的引數數目,因此函式原型也必須將可能的預設引數告知程式。方法是將值賦給原型...