此属性在没有访问修饰符的类型中(因此internal访问):
class SomeType {
private int length;
internal int Length {
get { return length; }
set length = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
允许使用SomeType程序集中的所有类型get和set访问器.问题:如何限制访问set到只有从SOMETYPE(和SOMETYPE确实)派生类型?
internal int Length {
get { return length; }
protected set length = value; }
}
Run Code Online (Sandbox Code Playgroud)
是由编译器拒绝,因为protected被认为是不是限制性更少internal(假定:protected有一个交叉点与internal,但不完全包括在internal- >派生类型可以存在超出的范围internal).
可以通过程序集中的任何类型访问的代码是什么,并且只能通过程序集中的派生类型进行设置?
编辑:查看答案后,我想我需要添加属性的另一特征,因为它可能使溶液中的一个区别:属性的类型实际上是SomeType.编辑后的代码是:
class …Run Code Online (Sandbox Code Playgroud) 我在组框中有一些单选按钮。我随机选择按钮,从视觉角度来看,所有按钮都完美运行,并且每次选择新按钮时都会调用事件处理程序。
现在我有一个依赖属性,当值发生变化时会有回调。当我在这个回调过程中读取任何按钮的 IsChecked 值时,该值是 False,尽管该按钮是视觉上选择的(它们同时都是 false,奇怪的)。调试器还显示所有未选中的按钮。
呼呼,我也不清楚原因,基本查证后……
<GroupBox>
<StackPanel>
<RadioButton x:Name="btNone"
Content="Disconnected"
IsChecked="True"
Checked="OnSelChecked"/>
<RadioButton x:Name="btManual"
Content="Manual"
Checked="OnSelChecked"/>
</StackPanel>
</GroupBox>
Run Code Online (Sandbox Code Playgroud)
事件处理程序:
private void OnSelChecked(object sender, RoutedEventArgs e) {
if (btManual.IsChecked == true) {
// is called
}
}
Run Code Online (Sandbox Code Playgroud)
依赖属性:
public static readonly DependencyProperty ManualProperty =
DependencyProperty.Register("Manual",
typeof(Position), typeof(SwitchBox),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.AffectsRender,
new PropertyChangedCallback(OnManualChanged)));
Run Code Online (Sandbox Code Playgroud)
依赖属性回调:
private static void OnManualChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) {
SwitchBox box = sender as SwitchBox;
if (box.btManual.IsChecked == true) {
// never true, why??
}
}
Run Code Online (Sandbox Code Playgroud) accessor ×1
c# ×1
dependencies ×1
internal ×1
properties ×1
protected ×1
radio-button ×1
unchecked ×1
wpf ×1