72 messaggi dal 22 marzo 2012
Buongiorno Lista

non so se l'oggetto sia corretto ma tento di spiegarmi

In una classe ho una struct che deve contenere delle sotto struct:

    public struct Parameter
    {
        public Request Request;
        public Response Response;
    }


le due sotto struct le ho dovute dichiarare in questa maniera

    public  struct Request
    {
        public string UriInnolvaBIV4;
        public string CodiceProdotto;
        public string Tipo;
        public string Formato;
        public string Denominazione;
        public string Provincia;
        public string CCIAA;
        public int NRea;
        public string CodiceAnagrafica;
        public string Riferimento;
        public string CodiceFiscale;
        public string Utente;
        public string Password;
        public string UserID;
        public string IPRichiedente;
    }

    public struct Response
    {
        public string CodiceEsito;
        public string DescrizioneEsito;
        public string Prodotto_Lista;
    }


Il problema è che all'esterno della classe si vede sia la classe Parameter che poi è quella che deve essere usata ma anche le strutture Request e Response.

Io vorrei poter far vedere solo la Parameter.

Pensavo di poterla dichiarare in questa maniera:

    public struct Parameter
    {
        public struct Request
        {
            public string UriInnolvaBIV4;
            public string CodiceProdotto;
            public string Tipo;
            public string Formato;
            public string Denominazione;
            public string Provincia;
            public string CCIAA;
            public int NRea;
            public string CodiceAnagrafica;
            public string Riferimento;
            public string CodiceFiscale;
            public string Utente;
            public string Password;
            public string UserID;
            public string IPRichiedente;
        }

        public struct Response
        {
            public string CodiceEsito;
            public string DescrizioneEsito;
            public string Prodotto_Lista;
        }
    }


ma mi da errore e non posso nemmeno dichiarare le due struct, che non voglio vedere, senza il public perché altrimenti mi da un errore di visibilità esterna.

La mia domanda è: devo per forza dichiarare così le struct o posso dichiararle in maniera diversa in modo da evitare di avere esposte all'eterno della classe struct che non voglio vedere in quanto non devono essere usate.

Spero che qualcuno mi sappia dare una illuminazione sul tema.

Grazie a tutti e cordiali saluti

Perini Luca

Perini Luca
11.872 messaggi dal 09 febbraio 2002
Contributi
Ciao Luca,


struct che non voglio vedere in quanto non devono essere usate.

In realtà sembra che debbano essere usate. Infatti, guarda la tua struct Parameter: i campi Request e Response li hai marcati col modificatore d'accesso public. Quindi tu VUOI che l'utente della struct Parameter acceda ai suoi campi Request e Response.
public struct Parameter
{
        public Request Request;
        public Response Response;
}

Se è così, anche le struct Request e Response devono essere loro stesse public.
Se invece volevi rendere inaccessibili i campi Request e Response, allora li devi rendere private o internal.

public struct Parameter
{
        private Request Request;
        private Response Response;
}

In questo modo, lo la struct Response avrà accesso ad essi.


Se invece quei campi andavano bene così, col modificatore public, allora forse vuoi che di Request e Response non siano costruite delle altre istanze dall'esterno.
Allora dovresti spostare le definizioni di Parameter, Request e Response in un proprio progetto Class Library e rendere internal il costruttore di Request e Response.
Le struct hanno sempre un costruttore pubblico, quindi se vuoi limitare la loro costruzione, dovrai trasformarle in classi.
        public class Parameter
        {
            public Request Request {get; set;}
            public Response Response {get; set;}
        }

        public class Request
        {
            internal Request()
            {

            }
        }
        public class Response
        {
            internal Response()
            {

            }
        }

Così dagli altri progetti non si potranno creare nuove istanze.

ciao,
Moreno
Modificato da BrightSoul il 20 luglio 2019 10:18 -

Enjoy learning and just keep making
72 messaggi dal 22 marzo 2012
Ciao Moreno
grazie per la risposta esaustiva.

Domani al rientro in ufficio farò delle prove e poi ti saprò dire

Grazie ancora e buon week end


Luca

Perini Luca

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.