簡單來說,
宣告在class中,函數外的變量可以被class中所有函數所使用。
舉個例子吧
static int a = 10;
int b=12;
public void MyTest2(int d)//非靜態方法
{
int sum = a + b + d;
Console.WriteLine(sum);
}
public static void MyTest(int a)//靜態方法
{
a = a + 1;
int x = Program.a;
Console.WriteLine(a);
Console.WriteLine(x);
}
static void Main(string[] args)
{
int c = 16;
int d = 33;
MyTest(c);
Program callNonStatic = new Program();
callNonStatic.MyTest2(d);
Console.ReadKey();
}
Main中呼叫MyTest的方法以參數c傳入被 int a接收,因為一開始就宣告了static int a,
若要使用全局變量要以Program.a的方式;而用同樣方式呼叫MyTest2會出現錯誤「需要有物件參考才能使用非靜態欄位、方法或屬性」。這是說明要使用非靜態方法要用該物件來呼叫。
如同紅色的代碼使用方式。
Guitar On The Bench
Fill my heart with Rock
2012年10月16日 星期二
2012年6月20日 星期三
編譯gcc可能遇到的一些error
首先編譯前看看一下我原先配置
$gcc -v
使用內建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
目的:i686-linux-gnu
配置為:../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
執行緒模型:posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
我所要編譯gcc的平台是ubuntu 12.04 32 bit
編譯gcc前請先檢查本身是否已經裝上gcc和binutils否則無法從gcc原碼編譯
還有編譯前要依序安裝gmp > mpfr> mpc
裝gmp前先
$sudo aptitude install build-essential m4
避免錯誤
checking for suitable m4… configure: error: No usable m4 in $PATH or /usr/5bin (see config.log for reasons).
對這三個安裝的配置分別
./configure --prefix=/usr/local/gmp --build=i386-linux-gnu
./configure --prefix=/usr/local/mpfr --build=i386-linux-gnu
./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --build=i386-linux-gnu
可以先創建一個build資料夾讓編譯完的資料可以放在裡面如($表示終端機#表示說明)
$mkdir build
$cd build #跳到此目錄
$../configure --prefix=/usr/gcc-4.7.1 --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --build=i386-linux-gnu #--prefix為安裝的路經資料夾
我是裝到/usr/gcc-4.7.1
$make
$make install
三個都安裝完後接著配置
$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/gcc-4.7.1/lib #gmp, mpfr, mpc都裝到/usr/gcc-4.7.1/了所以這行有沒有沒差(我自己是沒寫這行有錯請跟我說!)
$export LIBRARY_PATH=/usr/lib/i386-linux-gnu
$export C_INCLUDE_PATH=/usr/include/i386-linux-gnu
$export CPLUS_INCLUDE_PATH=/usr/include/i386-linux-gnu
準備開始編譯gcc了
$mkdir build #在源文件下創建build文件
$cd build
$../configure --build=i386-linux-gnu --target=i386-linux-gnu --prefix=/usr/gcc-4.7.1 --with-gmp=/usr/gcc-4.7.1 --with-mpfr=/usr/gcc-4.7.1 --with-mpc=/usr/gcc-4.7.1 --enable-threads=posix --enable-checking=release --enable--long-long --enable-languages=c,c++,java,objc,obj-c++,fortran --enable-shared --with-system-zlib --enable-__cxa_atexit --enable-clocale=gnu --disable-libunwind-exceptions --enable-libgcj-multifile --enable-java-awt=gtk --disable-dssi --enable-plugin --disable-multilib --with-arch=i686
#這邊是我的配置參數粗體部份不可少接著編譯
以下是我遇到的一些error狀況
1)找不到zlib.h文件或zlib.h:No such file or directory
解決$sudo apt-get install zlib1g-dev
2)error: bits/predefs.h:No such file or directory compilation terminated. ,需要安裝包multilib,
解決$sudo apt-get install gcc-multilib
3)缺少gnu/stubs-32.h:No such file or directory, 需要安裝g++-multilib
http://stackoverflow.com/questions/7412548/gnu-stubs-32-h-no-such-file-or-directory
這邊網路上大多是說sudo apt-get install libc6-dev-i386可以解決可是在ubuntu下找不到此安裝套件
也進行$sudo apt-get install g++-multilib, 編譯還是出錯,找不到答案所以參考網友作法用複製的
解決$cp stubs-32.h /usr/include/i386-linux-gnu/gnu /usr/include/gnu
4)error:libxtst file not found
解決sudo apt-get install libxtst-dev
5)error:Package gtk+-2.0 was not found in the pkg-config search path.
解決sudo aptitude install libgtk2.0-dev
6)編譯出現undefined reference to `__sync_bool_compare_and_swap_4'
你在配置./configure 沒加上--with-arch=i686
因為Glibc不再支援i386
編譯完成安裝後
進行舊編譯器保留與應用新的編譯器
$mv gcc gcc463
$mv g++ g++463
$mv cpp cpp463
$mv c++ c++463
連結到新的編譯器
$ln -s /usr/gcc-4.7.1/bin/gcc /usr/bin/gcc
$ln -s /usr/gcc-4.7.1/bin/g++ /usr/bin/g++
$ln -s /usr/gcc-4.7.1/bin/cpp /usr/bin/cpp
$ln -s /usr/gcc-4.7.1/bin/c++ /usr/bin/c++
最後查看一下目前版本
$gcc -v
使用內建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/gcc-4.7.1/libexec/gcc/i386-linux-gnu/4.7.1/lto-wrapper
目的:i386-linux-gnu
配置為:../configure --build=i386-linux-gnu --target=i386-linux-gnu --prefix=/usr/gcc-4.7.1 --with-gmp=/usr/gcc-4.7.1 --with-mpfr=/usr/gcc-4.7.1 --with-mpc=/usr/gcc-4.7.1 --enable-threads=posix --enable-checking=release --enable--long-long --enable-languages=c,c++,java,objc,obj-c++,fortran --enable-shared --with-system-zlib --enable-__cxa_atexit --enable-clocale=gnu --disable-libunwind-exceptions --enable-libgcj-multifile --enable-java-awt=gtk --disable-dssi --enable-plugin --disable-multilib --with-arch=i686
執行緒模型:posix
gcc version 4.7.1 (GCC)
別忘了編譯幾個程式測試這樣完成GCC安裝了!
如果找不到 crt1.o, etc. 可能需要以下處理
ln -s /usr/lib/i386-linux-gnu/crt1.o /lib/crt1.o
ln -s /usr/lib/i386-linux-gnu/crti.o /lib/crti.o
ln -s /usr/lib/i386-linux-gnu/crtn.o /lib/crtn.o
2012年5月29日 星期二
Sql Insert使用ExecuteScalar 方法 避免資料重複
做會員總數或註冊流水號的查詢
在ADO.NET中可以使用ExecuteScalar函數
來查出資料庫中剛註冊會員的流水號(假設名稱是IdNumber),將他設置成主鍵
並且自動增號
在我插入新增資料後接著ExecuteNonQuery再做ExecuteScalar
資料發生重複(插入)輸入的情況。當然重複的資料鍵值不同ExecuteScalar所找到的是第二次重複資料的流水號。目前還沒找到為甚麼會複製的資料。可能是自動增號的關係?
解決方法
1)
ExecuteNonQuery
select @@identity
ExecuteScalar
2)
Insert into tablename output inserted.IdNumber ....
ExecuteScalar
以上非完整code
就不會有重複資料了
參考閱讀(簡體)
http://www.bitscn.com/pdb/dotnet/200807/145550.html
http://www.w17x.com/AritcleDisplay.aspx?id=519
2012年5月23日 星期三
ADO dot NET 連結 VC內建MDF
用Visual Studio 來寫SQL,偵錯時一直沒成功,後來發現是我的Instance名稱不對
下面是很多前輩實行成功的code ! 別忘了用using來進行資源釋放
string dataDir = AppDomain.CurrentDomain.BaseDirectory;
if (dataDir.EndsWith(@"\bin\Debug\")
|| dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True");
備註:紅色是Instance名 ;藍色是資料表名稱
2012年5月11日 星期五
有些網站會要求存取您的「Google 帳戶」,您無意間授權多少網站呢??
如同頁面所說
Google 允許您與第三方網站分享您的 Google 帳戶資訊,而不會洩漏您的使用者名稱和密碼。
您可以透過「Google 帳戶」與另一網站分享的資訊有:
- 電子郵件地址
- 姓名
- 國家/地區和語言
- 瀏覽您的 Google 產品資訊,例如您的 Gmail 聯絡人、Google 日曆或 Picasa 網路相簿。
訂閱:
文章 (Atom)