【发布时间】:2011-04-21 20:49:22
【问题描述】:
假设我在 myFramework 命名空间中有一个基类:
using System;
using System.Collections.Generic;
using System.Text;
namespace myFramework
{
public class baseClass
{
internal int m_value;
internal int getValue() {
return m_value;
}
internal void setValue(int value) {
m_value = value;
}
}
}
在 MyApplication 命名空间中我继承自它:
using System;
using System.Collections.Generic;
using System.Text;
using myFramework;
namespace MyApplication
{
class InheritedClass: baseClass
{
}
}
在 MyApplication 命名空间中的一个表单中我使用它:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using myFramework;
namespace MyApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
InheritedClass inheritedClass = new InheritedClass();
inheritedClass.setValue(10);
textBox1.Text = inheritedClass.m_value.ToString();
}
}
}
如您所见,我已使用 internal 修饰符声明 m_value,以便我可以从 Form 访问它。
现在如果我在单独的程序集中编译 myFramework 会怎样?内部不会再工作了?那么我可以使用任何修饰符吗?受保护的甚至不能少做这项工作。我有义务使用 public 吗?
是否有一个访问修饰符允许拥有一个类(inheritedclass)的对象(表单)访问他拥有的所有类和父类的所有成员,就像 internal 一样,除了 internal 不考虑所有权但是在哪里类已声明?
更新:当然在实际使用中,我的基类与表单(或视图)有严格的语义,所以由我决定是否应该这样做,我的问题不是我是否应该这样做,我的问题是是否有可能或者如果我将不得不使用诸如按合同设计之类的东西,我觉得为这些基本要求添加另一个工具很愚蠢。
【问题讨论】:
标签: c#