2016-02-12 4 views
1

я взял это определение структуры из Windows API CodePack:Перевести C# CTOR к VB.NET эквивалентной

public struct IconReference 
{ 
    //... 

    public IconReference(string moduleName, int resourceId) 
     : this() 
    { 
     //... 
    } 

    public IconReference(string refPath) 
     : this() 
    { 
     //... 
    } 

    //... 
} 

Проблема заключается в том, я не понимаю, как перевести эти рода конструкторами в VB.NET.

Что это значит, что значение этого : this()?

Когда я использую переводчик онлайн-кода, он переводит его как Me.New(), однако это не удается при компиляции, потому что у этой структуры нет без параметров ctor.

+3

Там нет цели к ней, на структуру не может иметь конструктор по умолчанию. Просто пропустите. –

ответ

3

this() в C# вызывает беспараметрический конструктор. Поскольку у вас нет конструктора без параметров в C# (а в структурах даже не могут содержаться «явные конструкторы без параметров»), вы можете опустить this().

И так для кода VB.NET. Вы можете опустить код Me.New().

+0

Да, конструктор по умолчанию может быть указан в Vb.Net, но в рекомендациях MSDN указано, что это неправильно, я не уверен, почему ребята из WindowsAPICodePack это сделали, но если я могу его опустить, проблема решена, спасибо. – ElektroStudios

+1

Добро пожаловать. VB.NET дал мне ошибку в VS2015, но не в Ideone, поэтому я думаю, что они используют устаревший компилятор. Вероятно, это было «исправлено» в последней версии компилятора VB.NET. –

+0

Если вы опустите вызов конструктора по умолчанию на C#, вы попадете в [ошибку компилятора] (https://msdn.microsoft.com/en-us/library/bb513821.aspx), так как класс автоматически реализованное имущество. – sloth

2

Этот синтаксис необходим, поскольку IconReference имеет «автоматически реализуется свойство»:

public int ResourceId { get; set; } 

смотри также https://stackoverflow.com/a/7670854/121309