Интерфейс в выпуске c # - PullRequest
       3

Интерфейс в выпуске c #

3 голосов
/ 18 января 2012

Я новичок в разработке c #.Я просто пытаюсь изучить особенности интерфейса.Основываясь на статьях и заметках, которые я читал об интерфейсах, я попытался написать пример кода для реализации интерфейса, основываясь на том, что я понял из этих заметок и статей.

Но при отладке проекта я получил ошибку сборки

"Несовместимая доступность: тип параметра« StartMachine »менее доступен, чем метод« SwitchBoard.switchPress (StartMachine) »».

В чем здесь проблема?или я правильно реализовал интерфейс?Или моя концепция интерфейса неверна? ..

Пожалуйста, помогите.Заранее спасибо.

Я разместил свой код ниже.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        StartMachine s1 = new Machine1();
        SwitchBoard switch1 = new SwitchBoard();
        switch1.switchPress(s1);
    }
}

interface StartMachine
{
    void startMachine();
}

public class Machine1 : StartMachine
{
    public void startMachine()
    {
        HttpContext.Current.Response.Write("Machine 1 Started");
    }
}

public class Machine2 : StartMachine
{
    public void startMachine()
    {
        HttpContext.Current.Response.Write("Machine 2 Started");
    }
}

public class SwitchBoard
{
    public void switchPress(StartMachine switchNum)
    {
        switchNum.startMachine();
    }
}

Ответы [ 4 ]

8 голосов
/ 18 января 2012

Вам необходимо поместить модификатор доступа public перед вашим интерфейсом. Классы Machine1 / 2 public, но ваш интерфейс по умолчанию равен internal. Это менее доступно, чем общедоступное.

Установить интерфейс для общего доступа:

public interface StartMachine {...}

В качестве альтернативы вы можете изменить свои классы на:

internal class Machine1: StartMachine {...}
internal class Machine2: StartMachine {...}

Для получения дополнительной информации о модификаторах доступа, посмотрите MSDN .

Исправление: :

Класс Switchboard и метод switchPress: public. Тем не менее, метод switchPress пытается получить доступ к методу StartMachine.startMachine (тьфу, неоднозначное наименование), который является internal (по умолчанию). Вам необходимо либо изменить интерфейс StartMachine на общедоступный, либо изменить Switchboard / switchPress на internal.

4 голосов
/ 18 января 2012

Рассмотрите сообщение об ошибке, у вас есть "противоречивая доступность" между вашим методом и вашим интерфейсом.Исправление простое, отметьте ваш интерфейс как публичный.

public interface StartMachine

У вас есть открытый метод, который принимает StartMachine, но сам интерфейс не был помечен как открытый.Внешний код сможет увидеть метод, но не сможет предоставить ему соответствующий аргумент.

2 голосов
/ 18 января 2012

Сделайте ваш интерфейс общедоступным.

public interface StartMachine 
{
    ...
}
1 голос
/ 18 января 2012

Как уже говорили другие, пометьте интерфейс как общедоступный.Я добавлю, что я думаю, что путаница заключается в том, что, хотя все интерфейсы члены автоматически становятся открытыми, сам интерфейс не должен быть.Вы можете иметь частные интерфейсы для использования только внутри библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...