Реализация 2 интерфейсов с 'тем же именем' свойства

mysite.com это доменное имя. Я не знаю, как вам удалось перенаправить это имя на локальный компьютер (для этого проще всего отредактировать файл hosts), но вы должны сообщить всем остальным компьютерам о используемой вами паре имя-ip. , И вам нужно связать имя с адресом, который виден другим (localhost не будет делать это). Если у вас есть машина, которая является частью корпоративной инфраструктуры, возможно, у вас уже есть каноническое имя для вашего ПК, например pc00144.yourcompany.com. Если на вашем компьютере нет брандмауэра или порт, который вы используете для обслуживания веб-контента, открыт, то все, кто может пинговать ваш компьютер, должны иметь возможность подключиться к вашему сайту. Если это единственный сайт в вашей сети и он не настроен на использование виртуальных хостов, то он также должен быть подключен по IP.

9
задан Garry Shutler 10 February 2009 в 12:58
поделиться

8 ответов

Можно реализовать один из них или обоих интерфейсов с 'явной интерфейсной' реализацией, таким образом, компилятор знает, какое свойство ErrorMsg принадлежит который интерфейс.

Чтобы сделать это просто пишет: ISimpleInterface (для C#) после Вашего имени класса и затем нажимают на ISimpleInterface и выбирают реализацию явный интерфейс.

Больше информации здесь: http://msdn.microsoft.com/en-us/library/aa288461 (По сравнению с 71) .aspx

5
ответ дан 4 December 2019 в 11:44
поделиться

Извините, но я не осваиваю синтаксис VB.Net.

В C# можно реализовать интерфейсы неявно или явно. Если Ваш класс, Foo реализует ErrorMsg как открытый метод, эта реализация, будет использоваться для обоих интерфейсов.

Если Вы хотите отличную реализацию, можно реализовать ее явно:

string ISimpleInterface.ErrorMsg {get { ... } } 
string IExtendedInterface.ErrorMsg {get { ... } set { ... }} 
6
ответ дан 4 December 2019 в 11:44
поделиться

В C#, неявная реализация (с set) может удовлетворить оба из них:

class Foo : ISimpleInterface, IExtendedInterface
{
    public string ErrorMsg { get; set; } 
    public string SomeOtherProperty {get; set;}
}

Если Вы хотите изменить его, можно ли использовать явную реализацию ("Реализации" в VB?) - в C#:

string ISimpleInterface.ErrorMsg
{
    get { return ErrorMsg; } // or something more interesting
}
3
ответ дан 4 December 2019 в 11:44
поделиться

В C# можно использовать явную интерфейсную реализацию:

class Foo
{
    string ISimpleInterface.ErrorMsg
    { get... }

    string IExtendedInterface.ErrorMsg
    { get... set... }

    string IExtendedInterface.SomeOtherProperty
    { get... set... }
}

или интерфейсное отображение

class Foo
{
    public string ErrorMsg
    { get... set... }       

    public string SomeOtherProperty
    { get... set... }
}

Что касается VB.NET, это имеет Implements ключевое слово:

Property ErrorMsg As String Implements ISimpleInterface.ErrorMsg

Property OtherErrorMsg As String Implements IExtendedInterface.ErrorMsg
2
ответ дан 4 December 2019 в 11:44
поделиться

Ключевое слово Реализаций в VB.NET делает это легким:

Public Interface ISimpleInterface
  ReadOnly Property ErrorMsg() As String
End Interface

Friend Interface IExtendedInterface
  Property ErrorMsg() As String
  Property SomeOtherProperty() As String
End Interface

Public Class Foo
  Implements ISimpleInterface, IExtendedInterface
  Private other As String
  Private msg As String

  Public Property ErrorMsgEx() As String Implements IExtendedInterface.ErrorMsg
    Get
      Return msg
    End Get
    Set(ByVal value As String)
      msg = value
    End Set
  End Property

  Public Property SomeOtherPropertyEx() As String Implements IExtendedInterface.SomeOtherProperty
    Get
      Return other
    End Get
    Set(ByVal value As String)
      other = value
    End Set
  End Property

  Public ReadOnly Property ErrorMsg() As String Implements ISimpleInterface.ErrorMsg
    Get
      Return msg
    End Get
  End Property
End Class
2
ответ дан 4 December 2019 в 11:44
поделиться

Необходимо будет работать с Явными Интерфейсными Реализациями. Больше на предмете здесь: http://msdn.microsoft.com/en-us/library/aa288461 (По сравнению с 71) .aspx

0
ответ дан 4 December 2019 в 11:44
поделиться

В то время как явная реализация решит это, как показано другими, в этом самом случае я, вероятно, позволил бы IExtendedInterface реализовать ISimpleInterface (свойство ErrorMsg является семантически тем же свойством, это означает то же в этих 2 интерфейсах, которые я предположил бы).

interface ISimpleInterface
{
    string ErrorMessage { get; set; }
}
interface IExtendedInterface : ISimpleInterface
{
    string SomeOtherProperty { get; set; }
}
0
ответ дан 4 December 2019 в 11:44
поделиться

У Вас могут быть частные интерфейсы реализации подпрограмм. Это только выставляется, когда объект присвоен переменной того интерфейсного типа.

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim S As ISimpleInterface
        Dim Ext As IExtendedInterface
        Dim F As New Foo
        F.ErrorMsg = "Test Error"
        S = F
        Ext = F
        MsgBox(S.ErrorMsg)
        MsgBox(Ext.ErrorMsg)
        MsgBox(F.ErrorMsg)
    End Sub
End Class


Public Interface ISimpleInterface
    ReadOnly Property ErrorMsg() As String
End Interface

Public Interface IExtendedInterface
    Property ErrorMsg() As String
    Property SomeOtherProperty() As String
End Interface

Public Class Foo
    Implements ISimpleInterface, IExtendedInterface
    Private other As String
    Private msg As String

    Public Property ErrorMsg() As String Implements IExtendedInterface.ErrorMsg
        Get
            Return msg
        End Get
        Set(ByVal value As String)
            msg = value
        End Set
    End Property

    Public Property SomeOtherProperty() As String Implements IExtendedInterface.SomeOtherProperty
        Get
            Return other
        End Get
        Set(ByVal value As String)
            other = value
        End Set
    End Property

    Private ReadOnly Property ErrorMsgSimple() As String Implements ISimpleInterface.ErrorMsg
        Get
            Return ErrorMsg
        End Get
    End Property
End Class
0
ответ дан 4 December 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: