Странности с инстанцированием абстрактных объектов
От: Андрей Хропов Россия  
Дата: 21.02.07 18:07
Оценка:
Код, который почему-то работает в C# (взят из следующего примера) не компилируется в Немерле. При этом почему он работает в C# мне тоже непонятно (хотя я не эксперт в .NET):

C#:
using Microsoft.VisualStudio.VCProjectEngine;
 
class A
{
   public static void Main()
   {
      VCProjectEngine engine = new VCProjectEngineObject();
            System.Console.WriteLine(engine);
   }
}


D:\MyProjects\Scripts>csc testcs.cs /reference:"D:\Development\Visual Studio 200
5\Common7\IDE\PublicAssemblies\microsoft.visualstudio.vcprojectengine.dll"
Microsoft (R) Visual C# 2005 Compiler version 8.00.50727.42
for Microsoft (R) Windows (R) 2005 Framework version 2.0.50727
Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.

D:\MyProjects\Scripts>testcs
Microsoft.VisualStudio.VCProjectEngine.VCProjectEngineObjectClass


Как видно в первом случае инстанцируется объект VCProjectEngineObjectClass.

Nemerle:
[c#]
using Microsoft.VisualStudio.VCProjectEngine;
 
class A
{
   public static Main() : void
   {
       def engine = VCProjectEngineObject() :> VCProjectEngine;
             System.Console.WriteLine(engine);
   }
}
[/c#]


D:\MyProjects\Scripts>ncc testn.n /reference:"D:\Development\Visual Studio 2005\
Common7\IDE\PublicAssemblies\microsoft.visualstudio.vcprojectengine.dll"
testn.n:7:21:7:42: <[01;31merror<[0m: none of the meanings of `VCProjectEngineOb
ject' meets the type ?:
testn.n:7:21:7:42: <[01;31merror<[0m: the type `Microsoft.VisualStudio.VCProje
ctEngine.VCProjectEngineObject' is abstract and cannot be constructed
D:\MyProjects\Scripts>testcs
Microsoft.VisualStudio.VCProjectEngine.VCProjectEngineObjectClass

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Странности с инстанцированием абстрактных объектов
От: desco США http://v2matveev.blogspot.com
Дата: 22.02.07 12:30
Оценка: +1
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Код, который почему-то работает в C# (взят из следующего примера) не компилируется в Немерле. При этом почему он работает в C# мне тоже непонятно (хотя я не эксперт в .NET):


АХ>C#:

АХ>
АХ>using Microsoft.VisualStudio.VCProjectEngine;
 
АХ>class A
АХ>{
АХ>   public static void Main()
АХ>   {
АХ>      VCProjectEngine engine = new VCProjectEngineObject();
АХ>            System.Console.WriteLine(engine);
АХ>   }
АХ>}
АХ>


АХ>

АХ>D:\MyProjects\Scripts>csc testcs.cs /reference:"D:\Development\Visual Studio 200
АХ>5\Common7\IDE\PublicAssemblies\microsoft.visualstudio.vcprojectengine.dll"
АХ>Microsoft (R) Visual C# 2005 Compiler version 8.00.50727.42
АХ>for Microsoft (R) Windows (R) 2005 Framework version 2.0.50727
АХ>Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.

АХ>D:\MyProjects\Scripts>testcs
АХ>Microsoft.VisualStudio.VCProjectEngine.VCProjectEngineObjectClass


дело в аттрибуте CoClassAttribute(typeof(VCProjectEngineObjectClass)), которым помечен интерфейс VCProjectEngineObject
компилятор C# превращает код
VCProjectEngine engine = new VCProjectEngineObject();

в
Microsoft.VisualStudio.VCProjectEngine.VCProjectEngine engine = new VCProjectEngineObjectClass();
Re: Странности с инстанцированием абстрактных объектов
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.07 16:59
Оценка:
Интересно, а что талкает вместо русского слова "создание", "соданием" использовать эту кривую кальку?
Плюс как можно создавать что-то абстрактное?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Странности с инстанцированием абстрактных объектов
От: Oyster Украина https://github.com/devoyster
Дата: 23.02.07 12:22
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>При этом почему он работает в C# мне тоже непонятно (хотя я не эксперт в .NET):


АХ>Как видно в первом случае инстанцируется объект VCProjectEngineObjectClass.


В C# он работает потому, что C# компилятор знает кое-что важное про COM Interop-обёртки и подставляет создание конкретного класса обёртки. Думаю, что C# компилятор узнаёт тип конкретного класса из атрибута System.Runtime.InteropServices.CoClassAttribute, который цепляется к интерфейсу из interop сборки, созданному для COM объекта, так что теоретически можно делать то же самое и в Nemerle. Но вот нужно ли?...
Re[2]: Странности с инстанцированием абстрактных объектов
От: Андрей Хропов Россия  
Дата: 23.02.07 14:33
Оценка:
Здравствуйте, Oyster, Вы писали:

O>Здравствуйте, Андрей Хропов, Вы писали:


АХ>>При этом почему он работает в C# мне тоже непонятно (хотя я не эксперт в .NET):


АХ>>Как видно в первом случае инстанцируется объект VCProjectEngineObjectClass.


O>В C# он работает потому, что C# компилятор знает кое-что важное про COM Interop-обёртки и подставляет создание конкретного класса обёртки. Думаю, что C# компилятор узнаёт тип конкретного класса из атрибута System.Runtime.InteropServices.CoClassAttribute, который цепляется к интерфейсу из interop сборки, созданному для COM объекта, так что теоретически можно делать то же самое и в Nemerle. Но вот нужно ли?...


Наверное нужно. Почему нет? А то так вот подобные примеры кода из MSDN сложно будет портировать с C# на Nemerle. Хотя лучше всего почитать описывается ли такое поведение в стандарте на CLI.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.