বস্তুর সূচনা সিনট্যাক্স


99

আমি কেবল এফ # দিয়ে শুরু করছি এবং সি # 3 এর মতো অবজেক্ট ইনিশিয়ালাইজেশন করতে সিনট্যাক্সটি খুঁজে পাচ্ছি না।

অর্থাৎ এটি দেওয়া হয়েছে:

public class Person {
  public DateTime BirthDate { get; set; }
  public string Name { get; set; }
}

আমি কীভাবে এফ # তে নিম্নলিখিতগুলি লিখতে পারি:

var p = new Person { Name = "John", BirthDate = DateTime.Now };

উত্তর:


137

আপনি এটি এর মতো করতে পারেন:

let p = new Person (Name = "John", BirthDate = DateTime.Now)

কনভেনশন অনুসারে নতুন কেবল ডিসপোজেবল ক্লাসের সাথেই ব্যবহৃত হয়।
শনমার্টিন

98

সিএমএসের উত্তর অবশ্যই সঠিক। এখানে কেবলমাত্র একটি সংযোজন যা সহায়ক হতে পারে। এফ # তে, আপনি প্রায়শই কেবল পরিবর্তনযোগ্য বৈশিষ্ট্য ব্যবহার করে টাইপটি লিখতে চান। "অবজেক্ট ইনিশিয়ালাইজার" সিনট্যাক্স ব্যবহার করার সময়, বৈশিষ্ট্যগুলি পরিবর্তনীয় হতে হবে। এফ # এর একটি বিকল্প হল নামযুক্ত যুক্তি ব্যবহার করা, যা আপনাকে অনুরূপ সিনট্যাক্স দেয় তবে জিনিসগুলিকে অপরিবর্তনীয় রাখে:

type Person(name:string, ?birthDate) =
  member x.Name = name
  member x.BirthDate = defaultArg birthDate System.DateTime.MinValue

এখন আমরা লিখতে পারি:

let p1 = new Person(name="John", birthDate=DateTime.Now)
let p2 = new Person(name="John")

কোডটির জন্য আপনাকে নামটি নির্দিষ্ট করতে হবে, তবে জন্মদিনে কিছু ডিফল্ট মান সহ alচ্ছিক যুক্তি।


ধন্যবাদ টমাস, তবে আমার ক্ষেত্রে ব্যক্তিটি অন্য সমাবেশে আছেন এবং আমি এটি পরিবর্তন করতে পারি না :(
মরিসিও শেফার

2

আপনি newকীওয়ার্ডটি বাদ দিতে পারেন এবং কম ভার্বোজ সিনট্যাক্স ব্যবহার করতে পারেন :

let p = Person(BirthDate = DateTime.Now, Name = "John")

https://docs.microsoft.com/en-us/dotnet/fsharp/language-references/members/constructors


নতুন-কম সিনট্যাক্স এফ #
0xaryan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.