關於c 預設引數

2022-03-20 16:46:55 字數 1608 閱讀 3984

#是不支援 預設引數的,今天在網上找了點資料,現在整理了;

模擬預設引數 :

class

myclass

in  stays mainly in the .",

precip, country, location );

}static

string

mymethod(

string

precip, 

string

country )

static

string

mymethod()

static

void

main(

string

args)

}c#: 方法的預設引數 :

大家都知道在c

++中,我們可以為方法的引數指定乙個預設值,像這樣:

void

foo(

inti 

=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 預設引數

是不支援 預設引數的,今天在網上找了點資料,現在整理了 模擬預設引數 class myclass in stays mainly in the precip,country,location static string mymethod string precip,string country st...

C 中關於預設建構函式和預設引數

include using namespace std class time time int s,int h 10,int m 52 time int h,int m,int s hour h minute m sec s 過載建構函式,執行時會根據形參的不同,自動匹配呼叫 類的初始化資料成員的另...

C 預設引數

一 預設引數 在c 中,可以為引數指定預設值。在函式呼叫時沒有指定與形參相對應的實參時,就自動使用預設引數。預設引數的語法與使用 1 在函式宣告或定義時,直接對引數賦值。這就是預設引數 2 在函式呼叫時,省略部分或全部引數。這時可以用預設引數來代替。注意 1 預設引數只可在函式宣告中設定一次。只有在...