【发布时间】:2019-01-24 07:35:20
【问题描述】:
我想知道为什么 Visual Studio 2017 v15.9.5 中的 IntelliSense 实际上建议我将此类引用添加为静态 since:
- 没有任何私有构造函数
- 没有任何静态方法
- 没有任何静态成员
- 在引用这个非静态类的类上,我只是访问公共
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) 将导致添加完整的命名空间引用。我个人总是尝试删除所有类型限定符以简化代码阅读。
欢迎任何澄清这一点的线索。
P.S:很抱歉没有翻译代码,但我想关注“为什么”而不是内容本身。 继承的类没有引用“非静态”Formularios.Tipos 类。
【问题讨论】:
-
我很确定这是因为在您的
frmConfigurationPerfilEmail中您没有Tipos的实例。那么 IntelliSense 试图告诉您的是,您可以通过静态或类命名空间访问Tipos的公共属性。
标签: c# .net visual-studio static roslyn