Estou tentando passar um objeto (uma referência ao usuário atualmente conectado, basicamente) entre dois formulários. No momento, tenho algo nesse sentido no formulário de login:
private ACTInterface oActInterface;
public void button1_Click(object sender, EventArgs e)
{
oActInterface = new ACTInterface(@"\\actserver\Database\Premier.pad",this.textUser.Text,this.textPass.Text);
if (oActInterface.checkLoggedIn())
{
//user has authed against ACT, so we can carry on
clients oClientForm = new clients(oActInterface);
this.Hide();
oClientForm.Show();
}
else...
no próximo formulário (clientes), tenho:
public partial class clients : Form
{
private ACTInterface oActInt {get; set;}
public clients(ACTInterface _oActInt)
... o que resulta em eu obter:
Error 1 Inconsistent accessibility:
parameter type 'support.ACTInterface' is less accessible than method
'support.clients.clients(support.ACTInterface)'
c:\work\net\backup\support\support\clients.cs 20 16 support
Realmente não entendo qual é o problema - ambos os campos são privados e acessados pelo método público relevante no formulário. Googling realmente não ajuda, pois apenas aponta para um elemento ser público e o outro privado, o que não é o caso aqui.
Alguém ajuda?
Torne a classe pública.
é o mesmo que:
então a turma tem que ser pública
fonte
Se parece que o tipo
ACTInterface
não épublic
, mas está usando a acessibilidade padrão deinternal
(se for de nível superior) ouprivate
(se estiver aninhado em outro tipo).Dar ao tipo o
public
modificador o corrigia.Outra abordagem é definir o tipo e o método
internal
, se essa for sua intenção.O problema não é a acessibilidade do campo (
oActInterface
), mas oACTInterface
próprio tipo .fonte
Qual é a acessibilidade do tipo
support.ACTInterface
. O erro sugere que não é público.Você não pode expor uma assinatura de método público onde alguns dos tipos de parâmetro da assinatura não são públicos. Não seria possível chamar o método de fora, pois o chamador não conseguiu construir os parâmetros necessários.
Se você tornar
support.ACTInterface
público isso removerá esse erro. Como alternativa, reduza a acessibilidade do método de formulário, se possível.fonte
O problema não parece estar com a variável, mas com a declaração do ACTInterface. O ACTInterface é declarado interno por acaso?
fonte
Quando recebi esse erro, eu tinha uma classe "auxiliar" que não declarava como pública que causava esse problema dentro da classe que usava a classe "auxiliar". Tornar pública a classe "auxiliar" resolveu esse erro, como em:
public ServiceClass {public ServiceClass (HelperClass _helper) {}}
public class HelperClass {} // Observe o HelperClass público que resolveu meu problema.
Isso pode ajudar alguém que encontra isso.
fonte
O erro diz 'support.ACTInterface' é menos acessível porque você tornou a interface privada, pelo menos a torne interna ou pública.
fonte
Você pode obter o parâmetro (classe que tem menos acessibilidade)
object
e convertê-lo em sua classe poras
palavra-chave.fonte
Se esse erro ocorrer quando você desejar usar uma variável de classe em um novo formulário, coloque a definição de classe no campo
em vez do arquivo Formname.cs.
fonte
Após atualizar meu modelo de estrutura de entidade, encontrei esse erro infectando vários arquivos em minha solução. Simplesmente cliquei com o botão direito do mouse no meu arquivo .edmx e no meu arquivo TT e clique em "Executar ferramenta personalizada" e isso me fez voltar à direita depois de reiniciar o Visual Studio 2012.
fonte
Tente tornar seu construtor privado assim:
fonte