小编Mik*_*ike的帖子

C#set accessor可供程序集中的所有类型访问,并且仅将评估者提供给派生类型.如何?

此属性在没有访问修饰符的类型中(因此internal访问):

class SomeType {
    private int length;
    internal int Length {
        get { return length; }
        set length = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

允许使用SomeType程序集中的所有类型getset访问器.问题:如何限制访问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)

c# properties protected internal accessor

4
推荐指数
1
解决办法
2559
查看次数

WPF RadioButton 在 UI 中选择,但在代码中显示为 IsChecked == false

我在组框中有一些单选按钮。我随机选择按钮,从视觉角度来看,所有按钮都完美运行,并且每次选择新按钮时都会调用事件处理程序。

现在我有一个依赖属性,当值发生变化时会有回调。当我在这个回调过程中读取任何按钮的 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)

wpf dependencies unchecked radio-button

1
推荐指数
1
解决办法
5549
查看次数