Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

191
Views
¿Por qué esta referencia de clase no es ambigua?

Me pregunto por qué esta situación no da como resultado una referencia ambigua entre tipos, una clase dentro de nuestra biblioteca y una estructura externa. Considera lo siguiente-

Estructura externa-

 namespace External.Models { public struct ProxyUser { public string Username { get; set; } public string Password { get; set; } } }

Nuestra clase-

 namespace MyApp.Configuration { public class ProxyUser { public string Username { get; set; } public string Password { get; set; } } }

Entonces el código de llamada se aproxima-

 using External.Models; namespace MyApp.Configuration.Factories { sealed class Factory { public async Task<T> BuildConfiguration<T>() { var proxy = new ProxyUser { Username = username, Password = password }; // I would expect this to be ambiguous, but it references out class } } }

Esta es una biblioteca NetStandard 2.0 si eso hace la diferencia. El comportamiento es el mismo si hago de nuestra clase una estructura. ¿Por qué no es esto ambiguo?

EDITAR : la clase está sellada, nuevamente si eso hace la diferencia ...

RESPONDER

Como mencionó @Sinatr, parece estar relacionado con esta pregunta: https://stackoverflow.com/a/25437586/14872099

Esta es una demostración de los diferentes comportamientos que observé.

Esto se resuelve en nuestro MyApp.Configuration.ProxyUser -

 using External.Models; namespace MyApp.Configuration.Factories { sealed class Factory { public async Task<T> BuildConfiguration<T>() { var proxy = new ProxyUser { Username = username, Password = password }; // resolves to our class } } }

Esto se resuelve en la estructura externa.

 namespace MyApp.Configuration.Factories { using External.Models; sealed class Factory { public async Task<T> BuildConfiguration<T>() { var proxy = new ProxyUser { Username = username, Password = password }; // resolves to external struct } } }

Mover nuestra clase a otro espacio de nombres crea ambigüedad.

 using External.Models; using MyApp.Configuration.Models; // moved our class to this namespace namespace MyApp.Configuration.Factories { sealed class Factory { public async Task<T> BuildConfiguration<T>() { var proxy = new ProxyUser { Username = username, Password = password }; // this is ambiguous } } }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Los espacios de nombres internos (es decir, dentro de los corchetes de namespace de nombres) tienen prioridad sobre los espacios de nombres externos (es decir, using declaraciones antes del bloque de namespace de nombres).

Nota: "interno" y "externo" no son definiciones oficiales aquí, solo las uso para distinguirlas fácilmente.

Debido a la anidación, su bloque namespace MyApp.Configuration.Factories inherentemente también mira a los ancestros directos ( MyApp.Configuration y MyApp ), pero no a los espacios de nombres hermanos (por ejemplo MyApp.Configuration.Services ).

Cuando se encuentra una referencia no ambigua en los espacios de nombres internos, el sistema nunca se molesta en verificar los espacios de nombres externos y, por lo tanto, no encuentra ningún conflicto. Solo encontraría un conflicto si:

  • Hay dos opciones válidas en el espacio de nombres interno, por ejemplo, MyApp.Configuration.ProxyUser y MyApp.Configuration.Factories.ProxyUser
  • Hay dos opciones válidas en los espacios de nombres externos a los que se hace referencia, por ejemplo, External.Models.ProxyUser y Another.Namespace.ProxyUser (suponiendo que se haga referencia a ambos con instrucciones de using en este archivo).
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!