例如,如果我有Class1
和Class2
但我只希望Class3
能够访问它们,我该如何设置它?
我正在研究多重继承,但在C#中它似乎并不可能。我希望我的演示层只能调用Class3
而Class3
会根据Class1
的构造函数中设置的属性调用Class2
或Class3
。
Class1()
{
object GetData()
{
}
}
Class2()
{
object GetData()
{
}
}
public Class3()
{
bool mForClass2 = false;
Class1 mClass1;
Class2 mClass2;
public Class3(bool forClass2)
{
mForClass2 = forClass2;
mClass1 = New Class1();
mClass2 = New Class2();
}
public object getdata()
{
if(mForClass2)
{
return mClass2.getdata();
}
else
{
return mClass1.getdata();
}
}
}
答案 0 :(得分:3)
这正是私人内部类的目的。
public class Class3
{
public enum Type { Order, Inventory }
private interface IProvidesGetData{ object getData(); }
private class Class1 : IProvidesGetData { /* ... */ }
private class Class2 : IProvidesGetData { /* ... */ }
//...
}
答案 1 :(得分:1)
要延伸clcto answered,您不需要全部在一个文件中。您可以使用partial classes
将其拆分//In Class3.cs
public partial class Class3
{
public enum Type { Order, Inventory }
//...
}
//In IProvidedsGetData.cs
partial class Class3
{
private interface IProvidesGetData
{
object getData();
}
}
//In Class1.cs
partial class Class3
{
private class Class1 : IProvidesGetData
{
/* ... */
}
}
//in Class2.cs
partial class Class3
{
private class Class2 : IProvidesGetData
{
/* ... */
}
}
答案 2 :(得分:0)
同时制作Class1
和Class2
internal
,并将public Class3
放在同一个包中。
这会限制前两个对该包的可见性(主要是:Class3
),而class3
仍然是公开的。
当然,不要添加任何[InternalsVisibleTo]
内容。
正如其他人所说,你也可以使用几个不同的private
类,但这会给你一个大的源文件:不方便使用。使用此方法,您可以将其拆分为多个文件。
根据您的评论,您可以进行如下设置:
public enum CrudAction {
Add, Update, Get
}
public class UIController {
public void Perform(CrudAction action) {
switch(action){
case CrudAction.Add: new AddAction().Perform(); break;
case CrudAction.Get: new GetAction().Perform(); break;
case CrudAction.Update: new UpdateAction().Perform(); break;
default: throw new ArgumentException();
}
}
}
internal interface IAction {
void Perform();
}
internal class AddAction : IAction { }
internal class GetAction : IAction { }
internal class UpdateAction : IAction { }
现在所有内容都分为多个文件,您只能使用
访问它new UIController().Perform(CrudAction.Update);