C#非常新——我被指示创建一个子类来对基类进行变体。我以前从未上过分班,我读了一些,然后试了一下。从基类继承后,我只能从子类访问MyClass的私有属性。我在这里做了什么?这是一个真正的子类,还是某种嵌套继承的子类?
public class MyClass
{
private string connString;
// exec stored procedure 1
public class MySubClass : MyClass
{
otherClass o = new otherClass(connString);
// exec stored procedure 2
}
}
不管我做了什么,似乎都奏效了。此外,在讨论子类的主题时,有没有一种常见的命名方法?例如MyClass_SubClass或_MyClass等?
非常感谢!
编辑:再次感谢大家!我想我在这里寻找这个答案。无论如何,我意识到我误解了任务——根本不需要嵌套或继承!刚刚创建了一个单独的类似类。
您有嵌套的类,这可能是您应该避免的,直到您更好地理解C#和OOP(然后您继承,这很奇怪)。
子类或派生,通过继承实现。在您的示例中:
public class MyClass
{
private string connString;
// exec stored procedure 1
}
public class MySubClass : MyClass
{
otherClass o = new otherClass(connString);
// exec stored procedure 2
}
为了允许MySubClass
访问MyClass
的成员,需要将该成员标记为protected
或更高级别。不能在包含类之外访问private
成员。
public class MyClass
{
protected string connString;
// exec stored procedure 1
}
MySubClass实际上是MyClass.MySubClass。通常,普通子类不能访问私有成员。
一个普通的子类将作为一个独立的类在一个单独的文件中。如果子类应该被允许访问基类成员,那么您应该将它们声明为"受保护的"而不是"私有的"。
作为命名的主题之一,通常名称表示类型,而不考虑基类。例如,如果你有一个Animal基类,那么你有一个子类Dog和Cat是合理的。或者在Windows中,您可以有一个名为Control的基类和名为Button、TextBox、Label等的子类
您的代码是有效的,它并没有完全实现指示您实现的内容。您可以在类中声明一个类。使用您的代码,您可以实例化这两个类,如下所示。
class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
MyClass.MySubClass mySubClass = new MyClass.MySubClass();
}
}
这是非常不寻常的,在类中声明一个类并不罕见,但通常情况下,您不会将MySubClass声明为public,而是将其声明为private或protected。就像这样…
public class MyClass
{
private string connString;
private MyClassHelper mySubClass = new MyClassHelper();
// exec stored procedure 1
protected class MyClassHelper
{
object o = new object();
// exec stored procedure 2
}
}
因此MyClassHelper只存在于MyClass的范围内。我从未见过内部类继承外部类的代码,它编译得很完美,你永远不会这么做,你可以很容易地创建循环引用。
BradleyDotNET的答案告诉您如何实现MyClass的子类。这也被称为继承。在这里阅读更多关于它的信息。。。http://msdn.microsoft.com/en-us/library/ms173149(v=vs.80).aspx
作为一个警告,我不会对类继承太疯狂,类之间有很多类型的关系,相比之下,类继承是相当严格的。
问题的标题是子类或接口。接口是你应该关注和理解的东西,它们非常重要,尤其是对于实现SOLID代码。在我的代码中,类继承接口比继承类更常见。