Компилятор просто сообщает вам, что вы объявили Private Set для SubcatName, и все же ypou пытается присвоить ему значение после New Myobj ().
Для первого запуска вы можете объявить класс POD (простые старые данные - просто общедоступные данные, без методов или свойств), и как только вы увидите, что он запущен, вы можете настроить его, добавить методы и т. Д.
Если действительно важно, чтобы все свойства были доступны только для чтения, попробуйте сделать метод запросов статическим членом того же класса.
Также есть способ вернуть анонимный тип и привести его обратно к эквивалентному анонимному типу, объявленному на принимающей стороне. Должен перейти к C #, хотя: -)
Пример ( прочитайте статью ):
// Method that returns anonymous type as object
object ReturnAnonymous()
{
return new { City="Prague", Name="Tomas" };
}
// Application entry-point
void Main()
{
// Get instance of anonymous type with 'City' and 'Name' properties
object o = ReturnAnonymous();
// This call to 'Cast' method converts first parameter (object) to the
// same type as the type of second parameter - which is in this case
// anonymous type with 'City' and 'Name' properties
var typed = Cast(o, new { City="", Name="" });
Console.WriteLine("Name={0}, City={1}", typed.Name, typed.City);
}
// Cast method - thanks to type inference when calling methods it
// is possible to cast object to type without knowing the type name
T Cast<T>(object obj, T type)
{
return (T)obj;
}