Мне было интересно, почему IntelliSense в Visual Studio 2017 v15.9.5 фактически предлагает мне добавить эту ссылку на класс как статическую , так как :
- Не имеет частного конструктора
- Нет статических методов
- Нет статических членов
- В классе, который ссылается на этот нестатический класс, я просто обращаюсь к общедоступным
enum
("Modo")
Код класса:
using System.Collections.Generic;
namespace Formularios
{
public class Tipos
{
public enum GridControlMenusEdicion
{
Predeterminado,
Siempre,
Nunca
}
public enum Modo
{
Nuevo,
Modificacion,
Consulta
}
public enum TipoCampo
{
Texto,
Fecha,
Numero,
SiNo
}
public enum EstadoEntidad
{
Nueva,
Modificacion
}
public enum RangoDatos
{
Hoy,
Ayer,
EstaSemana,
SemanaPasada,
EsteMes,
MesPasado,
Ultimos3Meses,
AnoEncurso
}
}
class RangoDatosProvider
{
public Dictionary<Tipos.RangoDatos, string> DiccionarioRangoDatos()
{
return new Dictionary<Tipos.RangoDatos, string>
{
{ Tipos.RangoDatos.Hoy, "Hoy" },
{ Tipos.RangoDatos.Ayer, "Ayer" },
{ Tipos.RangoDatos.EstaSemana, "Esta semana" },
{ Tipos.RangoDatos.SemanaPasada, "Semana pasada" },
{ Tipos.RangoDatos.EsteMes, "Este mes" },
{ Tipos.RangoDatos.MesPasado, "Mes pasado" },
{ Tipos.RangoDatos.Ultimos3Meses, "Últimos 3 meses" },
{ Tipos.RangoDatos.AnoEncurso, "Año en curso" }
};
}
public string GetTextoLoadingRangoDatos(Tipos.RangoDatos seleccionUser)
{
switch (seleccionUser)
{
case Tipos.RangoDatos.SemanaPasada:
return "la " + DiccionarioRangoDatos()[seleccionUser].ToLower();
case Tipos.RangoDatos.Ultimos3Meses:
return "los " + DiccionarioRangoDatos()[seleccionUser].ToLower();
case Tipos.RangoDatos.AnoEncurso:
return "este año";
default:
return DiccionarioRangoDatos()[seleccionUser].ToLower();
}
}
}
}
Класс, который ссылается на предыдущий код (используется в конструкторе):
using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Formularios.Configuracion
{
public partial class frmConfiguracionPerfilEmail : frmBase
{
private readonly PerfilEmailGestion _perfilEmailGestion = new PerfilEmailGestion();
private readonly HashSet<string> _aliasExistentes;
public frmConfiguracionPerfilEmail(PerfilEmail mailSettings, HashSet<string> aliasExistentes, Modo modo)
{
InitializeComponent();
Inicializar(mailSettings);
_aliasExistentes = aliasExistentes;
Modo = modo;
}
}
}
Если я вызываю IntelliSense для быстрого добавления ссылок / использования, он предлагает мне два варианта:
- a) «использование статического Formularios.Tipos»
- b) «Modo» в качестве параметра конструкторастанет "Tipos.Modo"
Выбор a)
приведет к добавлению статической ссылки, чего я не понимаю, почему.
Выбор b)
приведет к добавлениюполная ссылка на пространство имен.Лично я всегда стараюсь удалить все классификаторы типов, чтобы упростить чтение кода.
Любой свет, брошенный на прояснение этого, будет весьма кстати.
PS: Извините, что не переводил код, но я хотелсосредоточиться на «почему», а не на самом контенте. Унаследованный класс не ссылается на класс "no-static" Formularios.Tipos
.