Два частных подкласса в один публичный класс
Я получил проект на C#, где мне нужно иметь базовый класс и два подкласса, и я хочу, чтобы подклассы были частными по отношению к базовым классам. Вот как это выглядит:
public class MyBaseClass
{
public void doMyWork()
{
doSubClass1();
doSubClass2();
}
}
private class MySubClass1
{
public void doSubClass1()
{
//Do stuff
}
}
private class MySubClass2
{
public void doSubClass2()
{
//Do stuff
}
}
Как я могу заставить это работать?
2 ответа
Больно ли, если сами классы не настолько приватны, но все еще находятся в вашей базе и недоступны снаружи?
public class MyBaseClass
{
private readonly MySubClass1 _sub1 = new MySubClass1();
private readonly MySubClass2 _sub2 = new MySubClass2();
public void DoMyWork()
{
_sub1.DoSubClass1();
_sub2.DoSubClass2();
}
}
public class MySubClass1
{
public void DoSubClass1() { /* Do stuff */ }
}
public class MySubClass2
{
public void DoSubClass2() { /* Do stuff */ }
}
Если это не достаточно хорошо и вам нужны эти файлы в отдельных файлах, как вы заявили, тогда вы можете использовать частичные классы, например, так.
Файл Class1.cs
public partial class MyBaseClass
{
public void DoMyWork()
{
(new MySubClass1()).DoSubClass1();
(new MySubClass2()).DoSubClass2();
}
}
Файл Class2.cs
public partial class MyBaseClass
{
private class MySubClass1
{
public void DoSubClass1() { /* Do stuff */ }
}
}
Файл Class3.cs
public partial class MyBaseClass
{
private class MySubClass2
{
public void DoSubClass2() { /* Do stuff */ }
}
}
Но все же не совсем понятно, чего вы здесь добиваетесь.
Если вы поместите свои подклассы в базовый класс, базовый класс сможет получить к ним доступ. Чтобы использовать ваш пример, это было бы так:
public class MyBaseClass
{
public void doMyWork()
{
new MySubClass1().doSubClass1();
new MySubClass2().doSubClass2();
}
private class MySubClass1
{
public void doSubClass1()
{
//Do stuff
}
}
private class MySubClass2
{
public void doSubClass2()
{
//Do stuff
}
}
}
Обратите внимание, что все, что я сделал, это переместил последний }
ко дну.