我想编写一个作为GPLv3发布的应用程序(将用.NET编写),我正在编写它,以便其他人可以将扩展名编写为DLL库.我假设这些也必须作为GPLv3发布,这是预期的.
我希望应用程序在第一个版本上附带的库之一将是一个与第三方应用程序连接的库.第三方应用程序提供了一个免费的(如在啤酒中)带有API的.NET库,它实际上是与第三方应用程序通信的通信驱动程序.
我的问题 - 这样可以吗?我假设它是,否则我无法编写基于.NET的代码并将其作为GPLv3发布,因为.NET实际上是带有API的库的集合.我有道理吗?
在C#中,您可以这样做以使您的成员变量不可变:
public readonly int y = 5;
Run Code Online (Sandbox Code Playgroud)
VB.NET中等效的"readonly"关键字是什么?
假设我的应用程序中有两个视图,即MemberListView和MemberEditView.它们与透视viewModels,MemberListViewModel和MemberEditViewModel相关联.模型与存储库类MemberRepository对话,该类具有成员类的CRUD方法.
在MemberEditView表单中,我有几个下拉列表显示类似Status(Active/Inactive/Pending),成员交易代码等.它们是我的viewModel中的ObservableCollection对象,并绑定到视图上的ComboBoxes.MemberRepository是否应该处理用于检索每个要显示的列表的gets?
如果在MemberEditView上我有一个网格,显示该成员多年来所有的工作.如果用户双击其中一个作业,则会调用JobHistoryEditView以显示作业信息,并且它具有JobHistoryViewModel.MemberRepository应该处理JobHistory CRUD方法还是应该有一个单独的JobHistory存储库?
我正在使用FluentNHibernate映射双向一对多关系,其中排序很重要,所以我使用一个列表:
HasMany(x => x.Children)
.AsList(index => index.Column("CHILD_INDEX"))
.KeyColumn("PARENT_ID")
.Not.LazyLoad()
.Access.CamelCaseField()
.Cascade.AllDeleteOrphan();
Run Code Online (Sandbox Code Playgroud)
另一方面,它的映射如下:
References(x => x.Parent)
.Column("PARENT_ID")
.Not.Nullable()
.Fetch.Join()
.Not.LazyLoad()
.Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)
现在在我的实际数据库中,CHILD_INDEX列不可为空.但是,当NHibernate在插入期间持久保存子元素时,它不会插入CHILD_INDEX列.然后执行UPDATE以设置CHILD_INDEX.这对我来说很奇怪,因为它在插入时肯定有索引值.
有没有办法告诉NHibernate在插入过程中编写索引列?
我有一个像这样的实体类(缺少很多东西):
class Parent
{
private readonly Iesi.Collections.Generic.ISet<Child> children =
new Iesi.Collections.Generic.HashedSet<Child>();
public virtual void AddChild(Child child)
{
if (!this.children.Contains(child))
{
this.children.Add(child);
child.Parent = this;
}
}
public virtual void RemoveChild(Child child)
{
if (this.children.Contains(child))
{
child.Parent = null;
this.children.Remove(child);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试删除子项时,该if语句的计算结果为false。因此,我在if语句上放置了一个断点,并计算了某些表达式:
this.children.Contains(child) => false
this.children.ToList()[0].Equals(child) => true
this.children.ToList()[0].GetHashCode() => 1095838920
child.GetHashCode() => 1095838920
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果GetHashCode返回相同的值,则会检查Equals. 为什么Contains返回错误?
myParent和Child实体都继承自一个公共Entity基类,该基类是 NHibernate 3.0 Cookbook 第 …
假设我有一次性类型:
class MyDisposable : IDisposable
{
public void Dispose() { }
}
Run Code Online (Sandbox Code Playgroud)
然后我希望每个线程都有自己的这个类的本地副本,每个线程一个:
private readonly ThreadLocal<MyDisposable> localMyDisposable
= new ThreadLocal<MyDisposable>(() => new MyDisposable());
Run Code Online (Sandbox Code Playgroud)
现在我想确保在线程退出之前,我调用Dispose()该值,如果它已创建.有没有办法做到这一点?我的应用程序中的一些线程是短暂的,有些线程很长.我想确保任何短命的人都能处理他们的价值观.
我已经定义了一个带有字符串成员的C#类.对于所有意图而言,将此类视为字符串的子类(除非不允许).我用它来表示一个匹配特定格式的强类型字符串字段(我已经大大简化了这一点).
public class field
{
private readonly string m_field;
public field(string init_value)
{
//Check the syntax for errors
if (CheckSyntax(init_value))
{
m_field = init_value;
}
else
{
throw new ArgumentOutOfRangeException();
}
}
public override string ToString()
{
return m_field;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够将此类直接与任何其他字符串(对象或文字)进行比较.因此,我在课堂上实现了以下内容:
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
return this.m_field == obj.ToString();
}
public override int GetHashCode()
{
return this.m_field.GetHashCode();
}
public static bool operator ==(field x, Object y)
{
if ((object)x …Run Code Online (Sandbox Code Playgroud) 使用案例:我正在使用数据模板将View与ViewModel相匹配.数据模板通过检查最派生类型提供的具体类型的工作,他们不看什么接口提供,所以我必须这样做没有接口.
我在这里简化了示例并省略了NotifyPropertyChanged等,但在现实世界中,View将绑定到Text属性.为简单起见,假设带有TextBlock的View将绑定到ReadOnlyText,带有TextBox的View将绑定到WritableText.
class ReadOnlyText
{
private string text = string.Empty;
public string Text
{
get { return text; }
set
{
OnTextSet(value);
}
}
protected virtual void OnTextSet(string value)
{
throw new InvalidOperationException("Text is readonly.");
}
protected void SetText(string value)
{
text = value;
// in reality we'd NotifyPropertyChanged in here
}
}
class WritableText : ReadOnlyText
{
protected override void OnTextSet(string value)
{
// call out to business logic here, validation, etc.
SetText(value);
}
}
Run Code Online (Sandbox Code Playgroud)
通过重写OnTextSet并改变其行为,我是否违反了LSP?如果是这样,有什么更好的方法呢?
我一直在研究一个没有可识别的数据访问层的应用程序,因此所有的SQL语句都只是构建为字符串并执行.我经常面对很长的INSERT语句,我试图弄清楚VALUES列表中的哪个值与列名列表中的哪个列匹配.
我正要创建一个小帮手应用程序,我可以在一个INSERT语句贴,并将它显示我与列名匹配了值的列表,只是为了调试,我想,"别人可能已经这样做了. "
有没有人知道一个网站,我可以在其中粘贴INSERT语句并让它显示一个两列表,第一列中的列名和第二列中的值?
c# ×4
.net ×2
equals ×2
mvvm ×2
nhibernate ×2
aslr ×1
contains ×1
gethashcode ×1
gpl ×1
idisposable ×1
insert ×1
liskov-substitution-principle ×1
list ×1
security ×1
sql ×1
vb.net ×1
wpf ×1