RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-32793

iluxa1810's questions

Martin Hope
iluxa1810
Asked: 2022-09-14 04:52:19 +0000 UTC

依赖于 CancellationToken 的服务

  • 1

通常,有一个服务类需要在构造函数中使用 CancellationToken。

我可以仅在默认的常规 .NET Core 容器中注册它,还是可以获得一些与应用程序生命周期相关的真实令牌?

我通过 CreateDefaultBuilder 创建主机

c#
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2022-04-19 18:38:02 +0000 UTC

如何清除chrome中的缓存?

  • 1

一般来说,有一个 Angular 项目托管在:http://localhost:2021/

当转到根 http://localhost:2021/ 时,它重定向到 http://localhost:2021/projects

现在我在这个地址运行另一个站点,但是 Chrome 将我重定向到 http://localhost:2021/projects,因为我从缓存中理解它......我按 CTRL + F5,但缓存没有被它清除...我不想完全清除所有站点的缓存。

google-chrome
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2022-04-05 16:39:45 +0000 UTC

如何对齐位于 2 个不同容器中的组合框?

  • 1

如何对齐红线(即顶部的组合框): 在此处输入图像描述

问题是顶部是嵌套在主网格中的单独网格(3 列),底部是嵌套在主网格中的 GroupBox。

从理论上讲,我可以将所有这些合并到 1 个网格中,但是由于 GroupBox 仍然会有轻微的差异......

标记:

<Window x:Class="DictionaryCreator.UI.Windows.DictionaryConfigurationWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DictionaryCreator.UI.Windows"
        xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
        mc:Ignorable="d"
        Title="Конфигурация справочника" Height="680" Width="800">
    <Grid >
        <Grid.Resources >
            <Style TargetType="Border" >
                <Setter Property="Padding" Value="5,5,5,5" />
            </Style>
        </Grid.Resources>
        <Grid.ColumnDefinitions>
            <ColumnDefinition ></ColumnDefinition>
            <ColumnDefinition ></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0" ColumnSpan="2" DataContext="{Binding DictConfigVM}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition ></ColumnDefinition>
                <ColumnDefinition ></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
            </Grid.RowDefinitions>
            <Border Grid.Row="0" Grid.Column="0">
                <Label  HorizontalContentAlignment="Right">Тип базы данных</Label>
            </Border>
            <Border Grid.Row="0" Grid.Column="1">
                <ComboBox  ItemsSource="{Binding Path=DbKinds}" DisplayMemberPath="Name" SelectedValue="{Binding Path=SelectedDbKind}"/>
            </Border>

            <Border Grid.Row="1" Grid.Column="0" >
                <Label HorizontalContentAlignment="Right">Сервер (MSSQL) или путь к файлу (MS ACCESS)</Label>
            </Border>
            <Border Grid.Row="1" Grid.Column="1">
                <TextBox  Text="{Binding Path=FilePathOrServerName,UpdateSourceTrigger=PropertyChanged}"/>
            </Border>

            <Border Grid.Row="2" Grid.Column="0">
                <Label   HorizontalContentAlignment="Right">Название базы данных</Label>
            </Border>
            <Border Grid.Row="2" Grid.Column="1">
                <TextBox  IsEnabled="{Binding Path=DbNameEnable}" Text="{Binding Path=DbName,UpdateSourceTrigger=PropertyChanged}"></TextBox>
            </Border>

            <Border Grid.Row="3">
                <Label  HorizontalContentAlignment="Right">Название таблицы</Label>
            </Border>
            <Border Grid.Row="3" Grid.Column="1">
                <ComboBox  DockPanel.Dock="Left" MinWidth="350" ItemsSource="{Binding Path=TableDescriptions}" SelectedValue="{Binding Path=SelectedTableDescription}">
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock>
                                <Run Text="{Binding Schema}" />
                                <Run Text="." />
                                <Run Text="{Binding TableName}" />
                            </TextBlock>
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>
            </Border>

            <Border Grid.Row="3" Grid.Column="2">
                <Button  DockPanel.Dock="Right" Command="{Binding Path=RefreshTablesCommand}"  >
                    <Image Style="{StaticResource ImageIcon}"  Source="../Icons/Refresh.png"/>
                    <Button.ToolTip>
                        Обновить
                    </Button.ToolTip>
                </Button>
            </Border>

            <Border Grid.Row="4">
                <Label  HorizontalContentAlignment="Right">Ключ таблицы (целое число)</Label>
            </Border>
            <Border Grid.Row="4" Grid.Column="1">
                <ComboBox  ItemsSource="{Binding Path=ColumnDescriptions}" DisplayMemberPath="ColumnName" SelectedValue="{Binding Path=SelectedKeyColumnDescription}"></ComboBox>
            </Border>
            <Border Grid.Row="5">
                <Label  HorizontalContentAlignment="Right">Название поля для нормализованного значения</Label>
            </Border>
            <Border Grid.Row="5" Grid.Column="1">
                <ComboBox  ItemsSource="{Binding Path=ColumnDescriptions}" DisplayMemberPath="ColumnName" SelectedValue="{Binding Path=SelectedFullTextColumnDescription}"></ComboBox>
            </Border>

        </Grid>
        <Border Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" >
            <GroupBox DataContext="{Binding AlgorithmConfigVM}">
                <GroupBox.Header>
                    Настройка алгоритма
                </GroupBox.Header>
                <Border>
                    <StackPanel>
                        <ComboBox ItemsSource="{Binding NormalizeServices}" SelectedItem="{Binding SelectedNormalizeService}" DisplayMemberPath="NormalizeAlgorithmType.Name"/>
                        <Border>
                            <StackPanel >
                                <Label>Параметры алгоритма</Label>
                                <ListView MinHeight="100" ItemsSource="{Binding Params}">
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <Grid>
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition/>
                                                    <ColumnDefinition/>
                                                </Grid.ColumnDefinitions>
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="*"></RowDefinition>
                                                </Grid.RowDefinitions>
                                                <Label Grid.Column="0" Content="{Binding Item.Name}"></Label>
                                                <TextBox Grid.Column="1" Text="{Binding Value}"></TextBox>
                                            </Grid>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>
                            </StackPanel>
                        </Border>
                        <Border>
                            <StackPanel>
                                <Label>Настройка привязок результатов раскладки</Label>
                                <ListView Height="100" ItemsSource="{Binding FieldBindings}" SelectedItem="{Binding SelectedBinding}" ScrollViewer.VerticalScrollBarVisibility="Visible"  HorizontalContentAlignment="Stretch">
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <Grid>
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition></ColumnDefinition>
                                                    <ColumnDefinition></ColumnDefinition>
                                                </Grid.ColumnDefinitions>
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="*"></RowDefinition>
                                                </Grid.RowDefinitions>
                                                <Label Grid.Column="0" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
                                                    <TextBox IsReadOnly="True" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" BorderThickness="0" Focusable="False" Cursor="Arrow" >
                                                        <TextBox.Text>
                                                            <MultiBinding StringFormat="{}{0} ({1})" Mode="OneWay">
                                                                <Binding Path="Item.Name" />
                                                                <Binding Path="Item.Description" />
                                                            </MultiBinding>
                                                        </TextBox.Text>
                                                    </TextBox>
                                                </Label>
                                                <ComboBox  Grid.Column="1" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=StackPanel},
                                        Path=DataContext.AvailableColumns}" DisplayMemberPath="ColumnName"
                                              SelectedItem="{Binding Value}">
                                                </ComboBox>
                                            </Grid>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>
                            </StackPanel>
                        </Border>

                    </StackPanel>
                </Border>
            </GroupBox>
        </Border>


        <WrapPanel Grid.Row="2"  Grid.ColumnSpan="3" HorizontalAlignment="Center" Margin="0 30 0 0">
            <Button Command="{Binding Path=SaveCommand}" Margin="0 0 25 0">
                <Button.Content>
                    <StackPanel Orientation="Horizontal">
                        <Image Style="{StaticResource ImageIconWithMargin}"  Source="../Icons/Save.png"/>
                        <Label VerticalAlignment="Center">Сохранить</Label>
                    </StackPanel>
                </Button.Content>
            </Button>
            <Button Command="{Binding Path=CancelCommand}" Margin="0 0 25 0">
                <Button.Content>
                    <StackPanel Orientation="Horizontal">
                        <Image Style="{StaticResource ImageIconWithMargin}"  Source="../Icons/Cancel.png"/>
                        <Label VerticalAlignment="Center">Отменить</Label>
                    </StackPanel>
                </Button.Content>
            </Button>
        </WrapPanel>
    </Grid>

</Window>
c#
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2022-03-31 15:40:56 +0000 UTC

如何解决重复样式的问题?

  • 0

一般来说,我有一个由图像和工具提示组成的按钮:

在此处输入图像描述

问题是每个这样的按钮都需要样式...

您似乎无法在样式的 TagetType 中指定应用的各种条件。

有什么办法可以解决这个问题?

有一个想法可以进行继承,但是如果您做得很聪明,那么您需要禁止将任何东西放入这样的按钮中,而在我看来,这就是痔疮......

c#
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2022-03-18 22:24:12 +0000 UTC

带有自定义 DataTemplate 的 ListView

  • 0

一般来说,我想让一行有 2 列:TextBox和CheckBox

我做了这样的一切:

<ListView Grid.Row="5" Grid.Column="1" MinHeight="100" ItemsSource="{Binding SelectedColumns}" ScrollViewer.VerticalScrollBarVisibility="Visible" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <DockPanel >
                        <TextBox DockPanel.Dock="Left" IsReadOnly="True" IsReadOnlyCaretVisible="False" Width="200" Text="{Binding Item.ColumnName}"></TextBox>
                        <CheckBox DockPanel.Dock="Right" Width="20" IsChecked="{Binding Checked}"></CheckBox>
                    </DockPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

并得到了这个结果: 在此处输入图像描述

这不是很漂亮,我想将 90% 分配给第一个元素,其余的分配给 CheckBox。

我该怎么做?看起来宽度和高度的显式设置并不完全正确,因为一切都应该自己安排。

我试过UniformGrid了,但它均匀地拉伸了所有东西,我不想要......

c#
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2022-03-18 18:25:47 +0000 UTC

一个窗口内有 2 个虚拟机

  • 1

假设我有一个类,其中包含描述配置的 2 个对象:

  1. 服务器端配置
  2. 客户端配置

每个类都有自己的字段等。

是的,我可以将所有这些都塞到一个 VM 中,但恕我直言,它会很大,我想将它分成 2 个 VM,但是这样配置就在一个窗口内。

如何解决这个问题?WPF 中是否有支持不同上下文的控件?

c#
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2022-03-02 20:17:46 +0000 UTC

复制必要的 XElements,仅此而已

  • 2

告诉我是否有 C# 中的常规工具,以便我可以传递一些 XPath 并复制带有属性、值的整个层次结构,仅此而已。

假设我通过了这个 XPath:root/TableRow/Id

而且即使root中除了TableRow还有其他节点,他也不会拿走。

或者您是否需要手动处理所有内容,从最后一个元素开始并按节点构建副本?

c#
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2021-12-01 16:18:27 +0000 UTC

Null 的可空类型和通用检查

  • 1

假设我想做一个通用的 IsNullOrEmpty 方法,它可以将类型 T 作为输入。

检查 Nullable 类型以查看它是否具有值时出现问题。

也就是我发现前端是Nullable的,但是

if (T is Nullable<T> nullable)

不起作用,并发誓不可能这样做......

我怎样才能做到这一点并确保 HasValue 返回真或假?

c#
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2021-11-13 22:30:51 +0000 UTC

C# 9.0 语法高亮由于某种原因不起作用

  • 0

我卷了2019最新版的studio: 在此处输入图像描述 net 5.0出现在列表中。

一切都编译成功,但工作室本身强调新语法是错误的:

在此处输入图像描述

可能是什么问题呢?

工作室应该已经自动选择了最新版本的语言:

在此处输入图像描述

c#
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2021-10-17 01:14:20 +0000 UTC

通过 XPath 创建节点

  • 1

告诉我,在 C# 中是否有一种标准方法可以使用 XPath 创建整个节点分支?

假设我提供 XPath root/node1/node2/node3 作为输入,整个分支将在 XDocument 中为我创建。

还是只能用句柄一个一个地迭代地创建 XElement?

c#
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-09-26 03:08:06 +0000 UTC

附件无法正确到达 rambler 邮件

  • 0

一般来说,我试图通过 SMTP 客户端将内部工作邮件中的一封信发送到位于 rambler 的邮箱。我将带有西里尔文名称的 *.xlsx 文件附加到此附件中。

问题是在信件的附件中它显示为 2.bin,尽管它可以正确地发送给其他邮件。该文件在发送时没有损坏,因为如果重命名它,它可以通过 Excel 正确打开。

如果你把名字改成拉丁文,那么问题就消失了……但是,我不明白这个名字的转换与什么有关……如果编码有问题,那么名字会显示为一些有点胡言乱语。

也许有人遇到过类似的问题?

我通过 C# 代码发送一封信,我使用 MailKit,

почта
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-09-18 23:37:26 +0000 UTC

此平台不支持 System.Data.SqlClient

  • 0

一般来说,由于某种原因,当作为独立的 Win x64 应用程序运行 Publish 时,错误 Sql client is not supported on this platform 崩溃,但如果您在 VS 下运行它,则一切正常。

.Net Core 是 2.2 版本,带有最新的可用 lib 版本,可与 Sql Server 一起使用。

可能是什么问题呢?

起初,我犯了一个错误,我试图在 Startup.cs 中执行迁移,但在将其删除后,它在尝试减去数据时开始出现同样的错误。

.net
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-07-07 20:38:38 +0000 UTC

包含不添加所有数据

  • 3

一般来说,有2个实体:

public class Project
{
    public int Id { get; set; }
    public string ProjectName { get; set; }
    public string ZnName { get; set; }
    public virtual ICollection<Task> Tasks { get; set; }
}

public class Task
{

    public int Id { get; set; }
    public int ProjectId { get; set; }
    public string Name { get; set; }
    public double? TimePlan { get; set; }
    public int? ItemsPlan { get; set; }
    public float? ImagesPlan { get; set; }
    public virtual Project Project { get; set; }
}

在配置文件中,我设置了它们之间的关系:

        builder.HasMany(x => x.Tasks)
            .WithOne(x => x.Project)
            .HasForeignKey(x => x.ProjectId);

        builder
            .HasOne(t => t.Project)
            .WithMany(p => p.Tasks)
            .HasForeignKey(t => t.ProjectId);

我知道设置在一个方向就足够了,然后出于绝望我将它们复制到另一个实体的设置中,因为我认为这会解决问题......

EF Core 最新版本 2。

我在我的存储库中做了这样的事情:

        var result = await context.Projects.Include(p => p.Tasks)
            .AsNoTracking().ToArrayAsync(cancellationToken);

一些项目留下了一个空的任务集合。

如果您尝试采用一个特定的有问题的项目并将其包含在两个方向:

        var project = context.Projects.Where(t => t.Id == 3220).Include(x => x.Tasks).ToList();
        var tasks = context.Tasks.Where(t => t.ProjectId == 3220).Include(x=>x.Project).ToList();

一切正常...

这是什么废话?

c#
  • 2 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-06-25 15:06:07 +0000 UTC

静态常量

  • 0

一般来说,我有一个类型,它里面有一个带有这种类型的字段:

/// <summary>
/// Период отчёта
/// </summary>
public class MReportsReportPeriodType : EnumBase
{
    /// <summary>
    /// Ежедневный
    /// </summary>
    public static MReportsReportPeriodType Daily { get; } = new MReportsReportPeriodType(0, nameof(Daily), "Ежедневный");
    /// <summary>
    /// Еженедельный
    /// </summary>
    public static MReportsReportPeriodType Weekly { get; } = new MReportsReportPeriodType(1, nameof(Weekly), "Еженедельный");
    private MReportsReportPeriodType(int id, string name, string description) : base(id, name, description)
    {
    }
}

在数据库中,这个东西被存储为一个 int 而不是一个单独的实体。

问题:有什么方法可以在 EF 2.0 中设置映射,使其在两个方向上都能正常工作?

理论上,我可以这样映射它:

    var own=builder.OwnsOne(x => x.ReportType);
    own.Ignore(x => x.Name);
    own.Ignore(x => x.Description);
    own.Property(x => x.Id).HasColumnName("ReportType");

这将适用于插入和更新,但是在从数据库中读取数据时会崩溃......我如何告诉 EF 从数据库中获取一个 INT,然后调用 special。获取 MReportsReportPeriodType 对象的类方法?

.net
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-03-17 19:22:31 +0000 UTC

通过 WMI(或其他编程方式)找出 IIS 中 URL-Rewrite 的存在

  • 0

告诉我,是否可以通过 WMI 找出网站上是否有 URL-Rewrite?

对此信息感兴趣:

我翻遍了 WMI 课程,但到目前为止我还没有找到任何合适的...

iis
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-03-11 20:25:52 +0000 UTC

在 EF Core 中创建迁移

  • 0

通常,有一个 liba,其中描述了模型、映射和上下文。

我执行命令:

添加迁移初始创建

工作室给我发了 nafig,说文件必须是可执行的。

好的,我将程序集连接到控制台应用程序并再次执行此命令,但我再次发送...

No DbContext was found in assembly 'ConsoleApp3'. Ensure that you're using the correct assembly and that the type is neither abstract nor generic.

虽然程序集中有 2 个 DbContext。

告诉我,在我的情况下创建迁移的正确算法是什么?

.net
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-02-28 17:09:16 +0000 UTC

.NET CORE 中的 NTLM 身份验证

  • 0

一般来说,我想添加 NTLM 身份验证。

在这里我读到 Kestrel 最近支持了这个功能,你只需要安装这个包:

Microsoft.AspNetCore.Authentication.Negotiate

我安装了所有东西并按照它说的做了:

services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
   .AddNegotiate();

和 app.UseAuthentication();

我在 Windows 上启动我的 API 应用程序并从同一台 PC 上敲击 Google Chrome 控制器。

我收到一条消息,我必须输入凭据。我输入了我的 PC 所在域的凭据,但没有任何反应,他们再次询问我。

我错过了什么?

.net
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-02-27 18:24:22 +0000 UTC

是否可以重命名拥有类型的列?

  • 1

我有一个复合类型,我通过调用 OwnsOne 通过 Fluent API 进行配置。

因此,将根据模板 {Property name}_{Field name} 在数据库中创建字段。

有什么办法可以覆盖这种行为?

这是一个 metanit 的例子:

using Microsoft.EntityFrameworkCore;

namespace HelloApp
{
    public class User
    {
        public int Id { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public UserProfile Profile { get; set; }
    }
    public class UserProfile
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    public class ApplicationContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public ApplicationContext()
        {
            Database.EnsureDeleted();
            Database.EnsureCreated();
        }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=relationsdb;Trusted_Connection=True;");
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>().OwnsOne(u => u.Profile);
        }
    }
}
.net
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-02-14 01:37:01 +0000 UTC

MS SQL 是搜索多个索引,还是只选择最佳的一个?

  • 1

假设有一个包含 A 列和 B 列的表。每列都有自己的索引。

因此,如果选择条件是 A 和 B,那么 SQL Server 将使用最优索引,但不会使用第二个,或者仍然会同时使用两个,例如,通过一个索引选择第一个,然后使用评选结果的第二个指标?

我倾向于只选择一个索引,但我无法谷歌确认......

sql-server
  • 1 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-02-10 03:35:59 +0000 UTC

里氏替换原则

  • 3

该原理描述了 3 条规则:

不能在子类中强制执行前提条件。换句话说,子类不应该创建比基类中定义的更多的前提条件来执行某些行为。

后置条件不能在子类中放宽。也就是说,子类必须满足基类中定义的所有后置条件。

不变量——基类的所有条件——也必须存储在子类中

似乎一切都是合乎逻辑的,但我不明白在这种情况下,可以用继承做什么,以免违反这个原则......

例如,这里是 metanit 的一个例子:强化前置条件:

class Account
{
    public int Capital { get; protected set; }

    public virtual void SetCapital(int money)
    {
        if (money < 0)
            throw new Exception("Нельзя положить на счет меньше 0");
        this.Capital = money;
    }
}

class MicroAccount : Account
{
    public override void SetCapital(int money)
    {
        if (money < 0)
            throw new Exception("Нельзя положить на счет меньше 0");

        if (money > 100)
            throw new Exception("Нельзя положить на счет больше 100");

        this.Capital = money;
    }
}

放宽后置条件:

class Account
{
    public virtual decimal GetInterest(decimal sum,  int month, int rate)
    {
        // предусловие
        if (sum < 0 || month >12 || month <1 || rate <0)
            throw new Exception("Некорректные данные");

        decimal result = sum;
        for (int i = 0; i < month; i++)
            result += result * rate  / 100;

        // постусловие
        if (sum >= 1000)
            result += 100; // добавляем бонус

        return result;
    }
}

class MicroAccount : Account
{
    public override decimal GetInterest(decimal sum, int month, int rate)
    {
        if (sum < 0 || month > 12 || month < 1 || rate < 0)
            throw new Exception("Некорректные данные");

        decimal result = sum;
        for (int i = 0; i < month; i++)
            result += result * rate /100;

        return result;
    }
}

我有些不明白,但是如果我真的需要改变遗留行为中的一些行为怎么办?

或者有一个接口并且 10 个类实现了这个接口 => 他们可以实现不同的行为,因为没有初始实现。

c#
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5