Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在抽象类中声明并在派生类中初始化的结构在实例化时不可见_C#_Struct_Visibility_Derived Class - Fatal编程技术网

C# 在抽象类中声明并在派生类中初始化的结构在实例化时不可见

C# 在抽象类中声明并在派生类中初始化的结构在实例化时不可见,c#,struct,visibility,derived-class,C#,Struct,Visibility,Derived Class,我一直在寻找这个问题,但没有运气,我希望它不会重复。 我有一个抽象类 public abstract class IFDB { public struct Estructura_TablaCuentasBancarias { public string NombreTabla; public string NumeroDeCuenta; public string Entidad; public string DN

我一直在寻找这个问题,但没有运气,我希望它不会重复。 我有一个抽象类

public abstract class IFDB
{
     public struct Estructura_TablaCuentasBancarias
    {
        public string NombreTabla;
        public string NumeroDeCuenta;
        public string Entidad;
        public string DNIPropietario;

        public Estructura_TablaCuentasBancarias(string NombreTabla, string NumeroDeCuenta, string Entidad, string DNIPropietario)
        {
            this.NombreTabla = NombreTabla;
            this.NumeroDeCuenta = NumeroDeCuenta;
            this.Entidad = Entidad;
            this.DNIPropietario = DNIPropietario;
        }
    }
}

以及派生类:

class CntrDBSQLSRVCompac: IFDB
{
     public readonly Estructura_TablaCuentasBancarias TablaCuentasBancarias =
        new Estructura_TablaCuentasBancarias("CuentasBancarias", "Numero De Cuenta", "Entidad", "DNI Propietario");
在程序中,我完成了以下实例:

protected IFDB ClsCntrlDB;
...

ClsCntrlDB = new CntrDBSQLSRVCompac();
但是当尝试使用estructure“TablaCuentasBancarias”时,它不在可能的函数/变量列表中。 如果结构的实例和初始化是在IFDB类中完成的,那么它可以完美地工作,但是,我想使IFDB类成为一个接口

我做错了什么


谢谢。

下面的代码对我来说很好,所以可能您还有其他问题

abstract class FooBase
{
    public struct Bar
    {

    }
}

class Foo : FooBase
{
    public readonly Bar BarInstance = new Bar();
}

class TestClass
{
    public static void Test()
    {
        var foo = new Foo();
        var bar = foo.BarInstance; //works fine
    }
}

estrustructure\u TablaCuentasBancarias
是一个。为了在接口中创建
IFDB
,您需要从
IFDB

public interface IFDB
{
    Estructura_TablaCuentasBancarias Foo { get; set; }

    // other properties/functions from the IFDB class
}

public struct Estructura_TablaCuentasBancarias
{
    // struct declaration
}

现在还不清楚你有什么问题。考虑修改你的问题,那么人们如何回答这个问题呢?我不在乎分数,我感谢那些试图帮助我(不像你)解决阻碍我的问题的人。。。有时候最愚蠢的问题是最糟糕的。我不知道你从哪里得到消极的态度。我只是做了一个评论,旨在帮助您找到答案。正如我之前所说,如果结构的实例和初始化是在IFDB类中完成的,那么它就可以完美地工作。但我不想这样,因为我想把这个类(IFDB)变成一个接口。因此,我想在派生类(CntrDBSQLSRVCompac)中执行实例和声明。谢谢你的回复。我现在没时间,我会尽快看一看。谢谢。@user1368116:该图像显示IFDB.cs中有一个错误,它说明了一些有关虚拟关键字的信息OK,这里编译了一个图像,具有相同的问题和所有代码。抱歉,如果前面的图像导致混淆:@user1368116:好的,您的问题是ClsCntrlDB的类型为IFDB,它没有公开您要查找的字段。您应该将ClsCntrlDB声明为CntrDBSQLSRVCompac。我现在明白了这一点,但是您的解决方案有一个大问题。如果我计划使用一个接口,那么逻辑上要做的事情就是将实例ClsCntrlDB声明为IFDB,否则创建一个接口就没有意义了。谢谢。@user1368116:你的问题是“我做错了什么?”,你还说“我要把它变成一个接口,但现在不是这个问题”。也许你应该问另一个问题,并说明你目前的问题。