1 c#
我是Stack Overflow和新手程序员的新手.我正在尝试构建Visual Studio 2010 C#其他人的代码作为学习机会.我无法弄清楚为什么我在附加的存根代码底部的四个类(第50,59,67和75行)中得到以下三个错误(我从原始程序中删除了所有与错误无关的内容) ):
1. “c_basic_object” ? Method must have a return type 2. “:” ? ; expected 3. “(p_name)” Invalid token ')' in class, struct, or interface member declaration 4. “p_name” ? The type or namespace name 'p_name' could not be found (are you missing a using directive or an assembly reference?)
该代码几乎与Andrew Troelsen在第4章的Pro C#2005中的Employee和Manager类相同.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestStub
{
class Program
{
static void Main(string[] args)
{
String strTest1 = "This is a string #1";
String strTest2 = "This is a string #2";
c_basic_object objBasic = new c_basic_object(strTest1);
Console.WriteLine(objBasic.m_name);
c_abstract_button_widget objButton = new c_abstract_button_widget();
Console.WriteLine("Test, Test, Test");
Console.ReadKey(true);
Console.WriteLine();
}
}// End class Program
public class c_basic_object
{
public string m_name = String.Empty;
//Constructor create_basic_object( p_name)
public c_basic_object(string p_name)
{
m_name = p_name;
}
// create_basic_object
//Constructor construct_empty()
public c_basic_object()
{
}
// construct_empty
//@ Destructor Destroy()
~c_basic_object()
{
}
} // End class c_basic_object
// -- definitions only for the Virtual Abstract functions in the factory
public class c_abstract_button_widget: c_basic_object
{
public c_basic_object(string p_name) : base(p_name)
{
//Console.WriteLine("Inside c_abstract_button_widget ");
}
} // end c_abstract_button_widget
// c_abstract_button_widget
public class c_abstract_label_widget: c_basic_object
{
public c_basic_object(string p_name) : base(p_name)
{
}
} // end c_abstract_label_widget
// c_abstract_label_widget
public class c_abstract_draw_surface_widget: c_basic_object
{
public c_basic_object(string p_name) : base(p_name)
{
}
} // end c_abstract_draw_surface_widget
// c_abstract_draw_surface_widget
public class c_abstract_scrollbar_widget: c_basic_object
{
public c_basic_object(string p_name) : base(p_name)
{
}
} // end c_abstract_scrollbar_widget
}// End namespace TestStub
Run Code Online (Sandbox Code Playgroud)
问题出在这里:
public class c_abstract_button_widget: c_basic_object
{
public c_basic_object(string p_name) : base(p_name)
{
//Console.WriteLine("Inside c_abstract_button_widget ");
}
}
Run Code Online (Sandbox Code Playgroud)
要声明构造函数,您必须指定类名 - 但是您已经编写过了c_basic_object.你的意思是:
public class c_abstract_button_widget: c_basic_object
{
public c_abstract_button_widget(string p_name) : base(p_name)
{
//Console.WriteLine("Inside c_abstract_button_widget ");
}
}
Run Code Online (Sandbox Code Playgroud)
您的其他子类也有同样的问题.
另外,您绝对应该开始遵循.NET命名约定.在这种情况下,您的类应该是:
BasicObjectAbstractButtonWidgetAbstractLabelWidgetAbstractScrollbarWidget...虽然假设你的"抽象"类实际上并不是抽象的,但你可能想要更多地重命名它们......也许你BasicObject应该是WidgetBase(或者AbstractWidget,实际上是抽象的......)
你的参数应该只是name代替p_name.
我还建议保持所有字段都是私有的(我也会抛弃m_前缀,但如果该字段是私有的并不是那么糟糕) - 您可能希望将该名称公开为属性.
此外,你几乎永远需要在C#终结/析构函数.绝对不要开始添加它们,直到你真的,真的知道你需要一个.
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |