在其他类的类中使用Structs

时间:2016-05-12 19:27:57

标签: c# vb.net class struct

我最近将一个VB类转换为C#,似乎我遇到了一个问题;我想我知道如何解决这个问题但是在我阅读的所有内容中,我现在正在寻求更明确的答案。 考虑下面的代码,里面有一个结构FileDetail(这只是一个例子 - 所以请不要假设它是FileDetail,就像在文件中一样..) Struct需要在内部和外部访问 - 它们通过值而不是引用类型传递,因此struct似乎是这里的方式而不是类(查看整个代码)。在表单类MyForm中,我得到了在IAFT类中不存在FileDetails的错误。

public class IAFT
{
    public struct FileDetail
    {
        public string FileType;
        public int FileNumber;
    }
}

public class MyForm
{
   MyForm()
   {
       public IAFT.FileDetail fd = new IAFT.FileDetail();
       // IAFT.FileDetail
   }
}

我知道的错误。 “IAFT”类型中不存在类型名称“ FileDetail ”(CS0426) VS2013中的红色标准属于类型声明;左侧的任务。

如果有任何帮助,两者都在同一名称空间中。

我已经阅读了关于SO的帖子告诉我我可以声明我的变量fd就像它在上面一样(因为我没有实例而对我没有意义 - 但我试过了。)我不想创建一个实例获得一个实例;我相信我想要一个存在于IAFT实例中的那个。也许有一些我不理解的东西。

我应该将结构封装为类吗? 我应该把结构放在IAFT类之外吗? [这就是我认为我应该做的。]

我应该做点什么吗?

3 个答案:

答案 0 :(得分:1)

您的代码示例错误,无法编译。您的错误是您正在进行交易

 public IAFT.FileDetail fd = new IAFT.FileDetail();

在公共构造函数中。您不能在函数范围变量中声明范围。如果您将公开声明关闭,则代码编译就可以了。

所以试试这个;

public class IAFT
{
    public struct FileDetail
    {
        public string FileType;
        public int FileNumber;
    }
}

public class MyForm
{

    public MyForm()
    {
        IAFT.FileDetail fd = new IAFT.FileDetail();
    }
}

嵌套课程是非常好的做法。

答案 1 :(得分:0)

没有必要执行struct static也不需要将它移到外面,问题在于你在一个函数中声明var为public,而且这是不允许的,localvariables没有访问修饰符,因为它们是本地的。

试试这个:

 try 
 Dim conn As SqlConnection = New SqlConnection   (System.Configuration.ConfigurationManager.ConnectionStrings("DefaultDataBaseServer").ConnectionString)
conn.Open()
Dim sql As String = lblConcept.Text.Replace("@xxxxxx", xxxxxID.Value)
Dim myCommand As SqlCommand = New SqlCommand(sql, conn)
ckConceptList.DataSource = myCommand.ExecuteReader()
ckConceptList.DataBind()


Catch ex As Exception

 Finally
        If pConn.State = ConnectionState.Open Then
            pConn.Close()
        End If
    End Try

答案 2 :(得分:-5)

我会这样:

public class IAFT
{
    fileDetail FileDetail = new fileDetail();
}

public class fileDetail
{
    public string FileType;
    public int FileNumber;
}

public class MyForm
{
   MyForm()
   {
       IAFT.FileDetail.FileType = "test";
       //IAFT.FileDetail
   }
}

我希望它有效,我还没有测试过。