Не компилируется код - почему?
От: Northrop  
Дата: 20.09.04 10:40
Оценка:
using System;
using System.Data;
using System.Runtime.Remoting;

namespace DEMO
{
        public interface IXmlDataManager
        {
                DataSet GetOfficesListAsDataSet();
        }

        public class ConnectDPCObj: MarshalByRefObject, IXmlDataManager
        {
                private DataSet GetOfficesListAsDataSet()
                {
                        DataSet ds = new DataSet();
                        return ds;
                }
        }



public class Sample
{
  public static void Main()
  {
  }
}

}



а вот так — компилируется:


using System;
using System.Data;
using System.Runtime.Remoting;

namespace DEMO
{
        public interface IXmlDataManager
        {
                DataSet GetOfficesListAsDataSet();
        }

        public class ConnectDPCObj: MarshalByRefObject, IXmlDataManager
        {
                public DataSet GetOfficesListAsDataSet()
                {
                        DataSet ds = new DataSet();
                        return ds;
                }
        }



public class Sample
{
  public static void Main()
  {
  }
}

}


Почему? Где про такое поведение компилера сказано?
Re: Не компилируется код - почему?
От: Aggtaa Россия  
Дата: 20.09.04 10:44
Оценка:
Здравствуйте, Northrop, Вы писали:

N>
N>        public interface IXmlDataManager
N>        {
N>                DataSet GetOfficesListAsDataSet();
N>        }
N>
N>        public class ConnectDPCObj: MarshalByRefObject, IXmlDataManager
N>        {
N>                private DataSet GetOfficesListAsDataSet()
N>                public DataSet GetOfficesListAsDataSet()
N>        }
N>

N>Почему? Где про такое поведение компилера сказано?

Compiler Error CS0536

'class' does not implement interface member 'interface member'. 'class member' is static, not public, or has the wrong return type

'class' does not implement interface member 'member1'. 'member2' is either static, not public, or has the wrong return type.

The compiler did not detect an interface member implementation. A declaration may be present that almost implements the interface member. Check for the following syntax errors in the declaration for the interface member:

public keyword is omitted.
Return type does not match.
static keyword is present.

A.
Re: Не компилируется код - почему?
От: Alex Axyonov Украина  
Дата: 20.09.04 10:58
Оценка: +1
Здравствуйте, Northrop, Вы писали:

N>Почему? Где про такое поведение компилера сказано?


В общем MSDN:

C# Language Specification
13.4.1 Explicit interface member implementations

Методы интерфейса необходимо делать либо public, либо делать explicit implementation(если хочешь чтобы метод можно было вызывать только как метод интерфейса).
... << RSDN@Home 1.1.4 beta 3 rev. 188>>
Re[2]: Не компилируется код - почему?
От: Northrop  
Дата: 20.09.04 11:31
Оценка:
Здравствуйте, Alex Axyonov, Вы писали:

AA>Здравствуйте, Northrop, Вы писали:


N>>Почему? Где про такое поведение компилера сказано?


AA>В общем MSDN:


AA>C# Language Specification

AA>13.4.1 Explicit interface member implementations

AA>Методы интерфейса необходимо делать либо public, либо делать explicit implementation(если хочешь чтобы метод можно было вызывать только как метод интерфейса).


Там речь идет как я понял только про явно объявленные реализации методов. Это же не мой случай
Re[3]: Не компилируется код - почему?
От: Сантехник Беларусь  
Дата: 21.09.04 08:42
Оценка:
N>Там речь идет как я понял только про явно объявленные реализации методов. Это же не мой случай

Твой случай — это неявная реализация, поэтому метод должен быть public.
... << RSDN@Home 1.1.4 beta 2 rev. 0>>
Re: Не компилируется код - почему?
От: ie Россия http://ziez.blogspot.com/
Дата: 21.09.04 10:07
Оценка:
Здравствуйте, Northrop, Вы писали:

[skip]

Так а ты задайся вопросом: Что будет, если я приведу объект твоего класса ConnectDPCObj к интерфесу IXmlDataManager?
Мне тяжело даже чисто по человечески понять, что должно произойти при вызове метода GetOfficesListAsDataSet.
Возможно, тебе следут сделать так:

using System;
using System.Data;
using System.Runtime.Remoting;

namespace DEMO
{
        public interface IXmlDataManager
        {
                DataSet GetOfficesListAsDataSet();
        }

        public class ConnectDPCObj: MarshalByRefObject, IXmlDataManager
        {
                private DataSet GetOfficesListAsDataSet()
                {
                        DataSet ds = new DataSet();
                        return ds;
                }
                DataSet IXmlDataManager.GetOfficesListAsDataSet()
                {
                        DataSet ds = new DataSet();
                        return ds;
                }
        }
}
... << RSDN@Home 1.1.3 stable >>
Превратим окружающую нас среду в воскресенье.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.