Chuyển đổi từ D2007 để XE2, tôi chuyển đổi chức năng nàyLàm cách nào để đặt giá trị mặc định cho tham số chức năng của loại TEncoding?
function Add_Line(FileStream : TFileStream; ALine : string) : boolean;
để
function Add_Line(FileStream : TFileStream; ALine : string; Enc: TEncoding = nil) : boolean;
var
AStr: ANSISTring;
begin
Result := True;
if Enc = nil then Enc := TEncoding.ANSI;
try
//Old FileStream.WriteBuffer(Pointer(ALine)^, Length(ALine));
if Enc = TEncoding.UTF8 then
AStr := UTF8Encode(ALine)
else
AStr := ANSIString(ALine);
FileStream.WriteBuffer(AStr[1], Length(ALine));
end;
except
Result := False;
end;
end;
Lý do:
Thay đổi mã sử dụng Add_Line càng ít càng tốt
Chấp nhận sự thay đổi tự động sang Unic ode, chỉ vào phút cuối ghi các tập tin văn bản 8-bit (điều này được sử dụng trong XML và CSV). Trong tương lai, chúng tôi vẫn có thể chuyển sang các tệp UTF-16 nếu chúng tôi muốn.
tôi đã có thể thích để xác định cái gì đó như:
function Add_Line(FileStream : TFileStream; ALine : string; Enc: TEncoding = TEncoding.ANSI) : boolean;
nhưng trình biên dịch phàn nàn ;-)
là bất cứ điều gì như thế có thể?
Việc hạn chế tham số mặc định là giá trị không đổi là một lý do khiến tôi luôn ưu tiên sử dụng quá tải. –
Quá tải không bao giờ vượt qua tâm trí của tôi ;-) –