【发布时间】:2016-07-13 06:45:42
【问题描述】:
我有这个我转换成 C# 的 VB 方法
Public Function GetToricData(ByRef SaveFileName As String) As ToricDataType
Dim filenumber As Short
Dim InString As String = ""
filenumber = FreeFile()
If System.IO.File.Exists(SaveFileName) Then
With GetToricData
FileOpen(filenumber, SaveFileName, OpenMode.Input)
Input(filenumber, InString)
If IsNumeric(InString) Then
.ToricAppDiam = Convert.ToDouble(InString)
End If
Input(filenumber, InString)
If IsNumeric(InString) Then
.NumToricOpticZones = Convert.ToInt16(InString)
End If
FileClose(filenumber)
End With
Else
With GetToricData
.NumToricOpticZones = 20
.ToricAppDiam = 3
End With
SaveToricData(SaveFileName, GetToricData)
End If
End Function
使用 Telerik Online Converter 将转换后转换为 C# 我得到了这个
public static FrontEndStructures.ToricDataType GetToricData(ref string SaveFileName)
{
var title = ((AssemblyTitleAttribute)System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false)[0]).Title;
FrontEndStructures.ToricDataType functionReturnValue = default(FrontEndStructures.ToricDataType);
//FrontEndStructures.ToricDataType functionReturnValue = new FrontEndStructures.ToricDataType();
int filenumber = 0;
string InString = "";
filenumber = FileSystem.FreeFile();
if (System.IO.File.Exists(SaveFileName))
{
var _with38 = functionReturnValue;
FileSystem.FileOpen(filenumber, SaveFileName, OpenMode.Input);
FileSystem.Input(filenumber,ref InString);
if (Information.IsNumeric(InString))
{
_with38.ToricAppDiam = Convert.ToDouble(InString);
}
FileSystem.Input(filenumber,ref InString);
if (Information.IsNumeric(InString))
{
_with38.NumToricOpticZones = Convert.ToInt16(InString);
}
FileSystem.FileClose(filenumber);
}
else
{
var _with39 = functionReturnValue;
_with39.NumToricOpticZones = 20;
_with39.ToricAppDiam = 3;
SaveToricData(ref SaveFileName, ref _with39);
}
return functionReturnValue;
}
ToricDataType 被定义为
public struct ToricDataType
{
public double ToricAppDiam;
public short NumToricOpticZones;
}
我想知道那一行的意义是什么
FrontEndStructures.ToricDataType functionReturnValue = 默认(FrontEndStructures.ToricDataType);
为什么在线工具使用Default关键字,为什么不能使用new关键字? 由于类是结构类型,结构是值类型,所以内存分配在哪里(堆栈或堆)以及如何初始化数据成员?
我期待对此进行详细解释,并想知道使用 new operator 是否可以帮助我实现相同的目的?
【问题讨论】:
-
“因为类是结构类型”。不。类是类,结构是结构。如果你想要一个可以指代任何一个的词,请使用“type”。
-
“结构是值类型,所以分配的内存在哪里”。总是为值类型分配的内存在哪里?它是什么值类型并不重要。
-
“如何初始化数据成员”。
default的全部意义在于它是该类型的默认值。就像 VB 中的Nothing一样,它相当于用零填充变量的堆栈内存。这意味着 ever 字段也将具有其类型的默认值。