Здесь нет ничего особенного в Toast
. Вы просто вызываете статический метод, который создает экземпляр (или может повторно использовать существующий) - это деталь реализации). Это шаблон, который вы увидите повсюду - Calendar.getInstance()
, например. Иногда вы можете вызвать конструктор вместо этого, иногда вы можете только создать экземпляр с помощью статического метода.
Если что-то не происходит под капотом, вероятно, что где-то в реализации будет вызов конструктора. Вот тривиальный пример:
public final class CreateViaMethod {
private final String name;
private CreateViaMethod(String name) {
this.name = name;
}
public static CreateViaMethod newInstance(String name) {
return new CreateViaMethod(name);
}
}
Существуют разные причины, по которым разработчик API может сделать это. Например, может быть несколько методов «создания» с одинаковыми типами параметров, но разные имена, например
public static Duration fromSeconds(int seconds)
public static Duration fromMinutes(int minutes)
public static Duration fromHours(int hours)
... у вас не могло быть трех перегруженных конструкторов, но вы можете дать методы разные имена.
Можно назвать версию командной строки inkscape, чтобы сделать это:
http://harriyott.com/2008/05/converting-svg-images-to-png-in-c.aspx
Также существует механизм визуализации C# SVG, прежде всего, разработанный, чтобы позволить файлам SVG использоваться в сети на codeplex, который мог бы удовлетворить Вашим потребностям, если это - Ваша проблема:
Исходный Проект
http://www.codeplex.com/svg
Ветвление с мерами и больше действия: (добавил 7/2013)
https://github.com/vvvv/SVG
Я использую Батик для этого. Полный код Delphi:
procedure ExecNewProcess(ProgramName : String; Wait: Boolean);
var
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin
FillChar(StartInfo, SizeOf(TStartupInfo), #0);
FillChar(ProcInfo, SizeOf(TProcessInformation), #0);
StartInfo.cb := SizeOf(TStartupInfo);
CreateOK := CreateProcess(nil, PChar(ProgramName), nil, nil, False,
CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS,
nil, nil, StartInfo, ProcInfo);
if CreateOK then begin
//may or may not be needed. Usually wait for child processes
if Wait then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end else
ShowMessage('Unable to run ' + ProgramName);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
procedure ConvertSVGtoPNG(aFilename: String);
const
ExecLine = 'c:\windows\system32\java.exe -jar C:\Apps\batik-1.7\batik-rasterizer.jar ';
begin
ExecNewProcess(ExecLine + aFilename, True);
end;