我想懇請有關在C#中的良好的編程習慣你的建議,當談到定義變量,爲他們分配空間,初始化它們,然後經過清理妥善清理一切。變量聲明,初始化和unamanaged內存分配
我面對的時刻的問題是,我有,它使用非託管API函數,其結果也不受管理的訪問存儲器(用於封送)的功能。我希望在退出之前使該功能保持清潔並妥善處理所有內容。事情是,所有的實際工作都在try-catch塊內完成。這意味着我無法清理中的所有內容或終於區塊。
我所做的就是聲明的所有變量,保留存儲器他們在最後塊進入的功能,然後乾淨的一切行動(靠近手柄,釋放內存,...)之後初始化它們。
都好,但我也想有變量聲明,初始化和內存分配在做過嘗試塊(東西初始化例如數組或內存中分配空間時,也可能會出錯或上帝知道在哪裏)。唯一想到的是嵌套兩個try-catch塊。這是好的還是你會提出其他建議?
這是我到目前爲止有:
//Declare variables, allocate memory, initialize variables.
........
try
{
//Do actual work - write to file and read from a file in my case
.........
}
catch (Exception exc)
{
//Exception handler for file write/read errors
}
finally
{
//Clean up (release handles, free memory,...)
}
而且這裏是我的想法:
try
{
//Declare variables, allocate memory, initialize variables.
........
try
{
//Do actual work - write to file and read from a file in my case
.........
}
catch (Exception exc)
{
//Exception handler for file write/read errors
}
}
catch (Exception exc_1)
{
//Exception handler for variable declaration, initialization, memory allocation errors
}
finally
{
//Clean up (release handles, free memory,...)
}
預先感謝您的幫助!
乾杯!
這對我來說不行,我想。我想在最外面嘗試的一些例子: 'NativeOverlapped HidOverlapped = new NativeOverlapped();' 'IntPtr eventObject = CreateEvent(IntPtr.Zero,false,false,「」);' 'IntPtr nonManagedOverlapped = Marshal.AllocHGlobal(Marshal.SizeOf(HidOverlapped));' 'Marshal.StructureToPtr(HidOverlapped,nonManagedOverlapped,false);' 我也正在初始化我的數組元素之一。爲了安全起見,我還必須假設在執行此操作時可能發生錯誤(例如IndexOutOfBounds異常)。 有什麼想法? – EEALNT
如何使用單獨的函數來完成工作(讀取和寫入文件)?這樣這個新函數將有它自己的try和catch塊。 但是,如果拋出異常並由被調用函數中的catch塊處理,程序是否會返回調用者函數? – EEALNT
1你可以使用2 set使用block設置你的nonManagedOverlapped來添加try catch,這很好 –